exports 和 module.exports 的区别
- 每个模块中都有一个 module 对象, module 对象中有一个 exports 对象 ,我们可以把需要导出的成员都挂载到 module.exports 接口对象中 也就是:
moudle.exports.xxx = xxx
的方式, 但是每次都 moudle.exports.xxx = xxx
很麻烦,点儿的太多了 - 所以 Node 为了你方便,同时在每一个模块中都提供了一个成员叫:
exports
exports === module.exports
结果为 true
地址相同,但是返回module.exports
- 所以对于:
moudle.exports.xxx = xxx
的方式 完全可以:expots.xxx = xxx
- 当一个模块需要导出单个成员的时候,这个时候必须使用:
module.exports = xxx
的方式 不要使用 exports = xxx
不管用 - 因为每个模块最终向外
return
的是 module.exports
- 而
exports
只是 module.exports
的一个引用 - 所以即便你为
exports = xx
重新赋值,也不会影响 module.exports
- 但是有一种赋值方式比较特殊:
exports = module.exports
这个用来重新建立引用关系的
moudle.exports = {
a: 123
}
// 重新建立 exports 和 module.exports 之间的引用关系
exports = module.exports
exports.foo = 'bar'
- 模块中导出单个成员和导出多个成员的方式
module.exports = xxx
- 通过多次:
exports.xxx = xxx
- 导出多个也可以:
moudle.exports = {多个成员}
- module.exports 和 exports 的区别
- exports 只是 module.exports 的一个引用而已,目的只是为了简化写法
每个模块最终 return 的是 module.exports
之所以让大家明白这个道理,是希望可以更灵活的去用它