注意我们没有使用 export = function() {} 来改变 exports 对象。没有这样做是因为在模块中的 exports 变量实际上是module.exports 的一个引用,而 module.exports 才是控制所有对外属性的exportsmodule.exports 指向同一块内存,如果把 exports 指向一个函数,那么相当于改变了 exports 的指向,exports 就不再是引用了。即便你改变了exportsmodule.exports 也是不变的。

当一个模块加载完成的时候,exports 对象才完整,整个加载的过程都是同步的。这也是为什么在一个事件循环后所有的模块都处于完全加载状态的原因。

这也意味着不能异步改变 exports 对象,例如,对任何模块做下面这样的事情:

fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err;
exports.data = data; // Will not work.
});