注意我们没有使用
export = function() {}
来改变 exports
对象。没有这样做是因为在模块中的 exports
变量实际上是module.exports
的一个引用,而 module.exports
才是控制所有对外属性的。exports
和 module.exports
指向同一块内存,如果把 exports
指向一个函数,那么相当于改变了 exports
的指向,exports
就不再是引用了。即便你改变了exports
,module.exports
也是不变的。
当一个模块加载完成的时候,
exports
对象才完整,整个加载的过程都是同步的。这也是为什么在一个事件循环后所有的模块都处于完全加载状态的原因。这也意味着不能异步改变 exports
对象,例如,对任何模块做下面这样的事情:
fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err;
exports.data = data; // Will not work.
});