一尘不染

CommonJs模块系统中“ module.exports”和“ exports”之间的区别

javascript

声明“如果要将导出对象设置为函数或新对象,则必须使用module.exports对象。”

我的问题是为什么。

// right
module.exports = function () {
  console.log("hello world")
}
// wrong
exports = function () {
  console.log("hello world")
}

我console.logged结果(result=require(example.js))和第[Function]一个是{}


阅读 252

收藏
2020-05-01

共1个答案

一尘不染

module是具有exports属性的普通JavaScript对象。exports是一个普通的JavaScript变量,碰巧设置为module.exports。在文件末尾,node.js基本上将“返回”module.exportsrequire函数。在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不再是同一个对象。

2020-05-01