export和module.exports

mac2024-03-16  26

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 } //因为return的是module.exports 下面对exports怎么赋值 返回的都是上面的数据 exports.a = 123; exports.b = 'hello' //但是下面这种情况特殊 这里表示重新建立exports和module.exports之间的引用关系 export = module.exports exports.foo = 'bar' //此时是有效的
最新回复(0)