在此页面上(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中作为引用传递,这意味着如果将多个变量设置到同一对象,则它们都是同一对象所以exportsmodule.exports是同一个对象。
但是,如果将exports设置为新的内容,它将不再设置为module.exports,因此exportsmodule.exports不再是同一对象。

关于javascript - CommonJs模块系统中“module.exports”和“exports”之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46971086/

10-12 03:25