在此页面上(http://docs.nodejitsu.com/articles/getting-started/what-is-require),它指出:“如果要将导出对象设置为函数或新对象,则必须使用module.exports对象。”
我的问题是为什么。
// right
module.exports = function () {
console.log("hello world")
}
// wrong
exports = function () {
console.log("hello world")
}
我用console.logging记录了结果(
result=require(example.js)
),第一个是[Function]
,第二个是{}
。您能否解释其背后的原因?我在这里阅读帖子:module.exports vs exports in Node.js。它很有帮助,但没有解释以这种方式设计它的原因。如果直接返回出口参考书会不会有问题?
最佳答案
module
是具有exports
属性的普通JavaScript对象。 exports
是一个纯JavaScript变量,碰巧设置为module.exports
。
在文件末尾,node.js基本上会将module.exports
“返回”到require
函数。在Node中查看JS文件的一种简化方法是:
var module = { exports: {} };
var exports = module.exports;
// your code
return module.exports;
如果在
exports
上设置一个属性,例如exports.a = 9;
,也会设置module.exports.a
,因为对象在JavaScript中作为引用传递,这意味着如果将多个变量设置到同一对象,则它们都是同一对象所以exports
和module.exports
是同一个对象。但是,如果将
exports
设置为新的内容,它将不再设置为module.exports
,因此exports
和module.exports
不再是同一对象。关于javascript - CommonJs模块系统中“module.exports”和“exports”之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46971086/