exports与module.exports的区别
Posted lvhuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了exports与module.exports的区别相关的知识,希望对你有一定的参考价值。
nodejs有自己的模块系统,分为文件模块和内置模块。webpack是运行在node环境中,在学习vue-cli的webpack配置的时候,
发现有的文件模块:
exports.fun1=function(param){ // }
exports.fun2=function(param){ // },
比如utils.js文件。。。
而有的文件模块:
module.exports = { // }
他们有什么区别呢?我只是自己的理解与资料总结,会一直更新与更改:
- 1.每个
js
文件一创建,都有一个var exports = module.exports = {};
,使exports
和module.exports
都指向一个空对象。 - 2.
module
是全局内置对象,exports
是被var
创建的局部对象。 - 3.
module.exports
和exports
所指向的内存地址相同
- 1.
module.exports
像是exports
的大哥,当module.exports
以{}
整体导出时会覆盖exports
的属性和方法, - 2.注意,若只是将属性/方法挂载在
module.exports.
/exports.
上时,exports.id=1
和module.exports.id=100
,module.exports.id=function(){}
和exports.id=function(){}
,最后id的值取决于exports.id
和module.exports.id
的顺序,谁在后,就是最后的值
- 3.若
exports
和module.exports
同时赋值时,exports
所使用的属性和方法必须出现在module.exports
,若属性没有在module.exports
中定义的话,出现undefined
,若方法没有在module.exports
中定义,会抛出TypeError
错误。RHS查询
总之:如果只是单一属性或方法的话,就使用exports.属性/方法
。要是导出多个属性或方法或使用对象构造方法
,结合prototype
等,就建议使用module.exports = {}
。
以上是关于exports与module.exports的区别的主要内容,如果未能解决你的问题,请参考以下文章
module.exports与exports,export与export default的区别
module.exports,exports,export和export default,import与require区别与联系