exports是module.exports的引用。你的模块最终返回module.exports给调用者,而不是exports。
Node.js 在初始化时就执行了一句 exports = module.exports , 所以 exports 指向了 module.exports 相同的内存, 之后你若改变 module.exports 所指向的內存 , 你必須重新再执行一句 exports = module.exports , 才能指向正确的实例, 之后再赋值才有效.
例如刚开始时 module.exports 指向实例 A , exports 指向 module.exports , 即也是指向相同的实例A.
之后你执行 module.exports = "xxx" , module.exports 指向了別的内存区 (指向了实例B), 而此时 exports 的引用并没有改变, 仍然指向原來的实例A. 所以在模块输出时就没有效果了. 模块输出时只会输出 module.exports 这个引用所指向的东西. 因此你对exports 所做的任何属性的改变, 只是在对实例A 做改变, 对实例B 没有作用.
你可以随意往exports加属性(因为是属性,便也会向module.exports上加属性,但是如果让exports=xxx,即重新定义exports,那你只是让exports成为另一个引用,module.exports的值仍然不便),理解到exports是module.exports的引用才是最关键的。所以不能直接向exports赋值