写在前面
官网是这么建议的,如果你怕混淆,只用module.exports
就好了。
要点
exports
是指向的module.exports
的引用- module.exports初始值为一个空对象{},故exports也为{}
知道exports
是module.exports
的引用,则可知
- 当
exports
被完全替换时,则不再指向module.exports
- 当
module.exports
被完全替换时,exports
不会改变
console.log(module.exports === exports) // 初始化 true
exports = module.exports // 让 exports 重新指向 module.exports
进一步
值得注意的是:require()
返回module.exports
module.exports.hello = true; // 被导出
exports = { hello: false }; // 没有被导出
这种情况可以通过模拟require
说明
function require() {
const module = {
exports: {}
};
// 修改exports只在内部起作用,无法影响到外部module.exports
((module, exports) => {
// Module code here. In this example, define a function.
function someFunc() {}
exports = someFunc;
// At this point, exports is no longer a shortcut to module.exports, and
// this module will still export an empty default object.
module.exports = someFunc;
// At this point, the module will now export someFunc, instead of the
// default object.
})(module, module.exports);
return module.exports;
}