require用来加载代码,exports和module.exports用来导出代码,两者的区别有3点:
(1)module.exports的初始值为一个空对象{}
(2)exports是指向的module.exports的引用
(3)require返回的是module.exports的而不是exports
注:我们经常看到这样的写法:exports = module.exports = somethings
其等价于:
module.exports = somethings
exports = module.exports
原理很简单,即 module.exports 指向新的对象时,exports 断开了与 module.exports 的引用,那么通过 exports = module.exports 让 exports 重新指向 module.exports 即可。