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为了你方便,同时在每一个模块中提供了一个成员叫:exportsconsole.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
}
exports
.a
= 123;
exports
.b
= 'hello'
export = module
.exports
exports
.foo
= 'bar'