exports和module.exports
-
在
node
中,每个模块内部都有一个自己的module
对象,而在module
中,也有一个对象叫: exports也是一个对象
比如:var module = { exports: { foo:'bar', add: function(){} } }
-
如果需要对外导出对象,只要把导出的成员挂载到
module.exports
中,如果每次访问都要通过module.exports.xxx = xxx 所以有如下
module.exports = function(){}
- 当一个模块需要导出单个成员的时候,直接exports=xxx是不管用的
- 对象最终返回的还是module.exports,所以给exports赋值是不管用的
- exports = module.exports会重新建立引用
总结
exports
和module.exports
的区别
- 每个模块都有一个module对象
- module对象中有一个
exports
对象 - 我们可以把需要导出的成员都挂载到module.exports接口对象中
- 也就是:
module.exports.xxx = xxx
- 但是每次都
module.exports.xxx = xxx
很麻烦,点儿的太多了 - 所以Node为了你方便,同时在每一个模块中提供了一个成员叫:
exports
console.log(exports === module.exports)
结果为true- 所以对于:
module.exports.xxx = xxx
的方式完成可以:exports.xxx = xxx
- 当一个模块需要导出单个成员的时候,这个时候必须使用:
module.exports.xxx = xxx
的方式 - 不要使用
exports=xxx
不管用 - 因为每个模块最终向外
return
的是module.exports
- 而
exports
只是module.exports
的一个引用 - 所以即便你为
exports = xx
重新赋值,也不会影响module.exports
- 但是有一种赋值方式比较特殊: exports=module.exports这个用来重新建立引用关系的
module.exports = {
a:123
}
//因为return的是module.exports 下面对exports怎么赋值 返回的都是上面的数据
exports.a = 123;
exports.b = 'hello'
//但是下面这种情况特殊 这里表示重新建立exports和module.exports之间的引用关系
export = module.exports
exports.foo = 'bar' //此时是有效的