在学习Node
过程中,对exports
和module.exports
有所混淆,所以在弄清楚这两者的区别之后决定用博客记录下两者的区别。
多说不易,先直接上代码,利用exports
导出a
函数,module.exports
导出b
函数
text.js
function a (){
}
function b (){
}
exports.a = a
module.exports.b = b
如果我们打印test模块最终导出的对象将会是下列这种情况
const test = require("test.js)
/**
test: {
a: function(),
b: function()
} **/
这时你会发现a
和b
函数竟然都被导出,那是不是exports
和module.exports
导出的是一个对象呢?我们来看看下一个代码
function a (){
}
function b (){
}
exports.a = a
module.exports = {
b
}
/**以上的module.exports = {
b
}
等同于以下的代码
const newObj = {
b: b
}
module.exports = newObj
**/
而此时的test.js导出的对象是这样的
const test = require("test.js)
/**
test: {
b: function()
} **/
这时导出的对象中就只有b
这一个函数,说明这时module.exports = {b}
的{}
对象是作为我们test.js
最终导出的对象。那就是当我们没有对moudle.exports
导出的对象进行更改时,将会导出默认对象,并且exports
也是指向该对象的。当我们通过module.exports
的对象不是默认对象时,exports
的指向会在哪里呢?来看看下一列代码
function a (){
}
function b (){
}
module.exports = {
b
}
exports.a = a
再次打印导出的对象
const test = require("test.js)
/**
test: {
b: function()
} **/
通过这三次的示例代码,相信已经对module.exports
和exports
之间的关系有所理解了。当我们从某个模块中导入时,其实导入了module.exports
定义的对象,而exports
是module.exports
没有改变导出的对象,即默认导出对象的一个引用。