直接回答:exports 只是指向 module.exports 的一个变量,给 exports 整个重新赋值就断开了引用,外部拿到的还是原来那个对象;要导出单个函数或类,必须写 module.exports = ...。

首先得明确两个的含义

exports:首先对于本身来讲是一个变量(对象),它不是module的引用,它是{}的引用,它指向module.exports的{}模块

module.exports:首先,module是一个变量,指向一块内存,exports是module中的一个属性,存储在内存中,然后exports属性指向{}模块

内存示意图如下:

​ C1051FFF04D04273B2DF2F6A9807CEBA

现在来看看它们在运用中的异同:

exports.bar=function(){};

module.exports.bar=function(){}

上面的两行代码,分别来暴露相同的模块,两个方式是等价的,因为他们改变的内存是暴露模块的{},使暴露模块变成了

0DCBBA7E97F0471698378116657F485A

exports和module.exports的等价是由于他们在操作同一块内存,所以意义是一样的

exports=function(){};

module.exports=function(){}

现在我们把bar属性给去掉,这时候效果就完全不一样了

​ 23C279AFB16D411382264302057CA174

这时候exports和module.exports操作的就不是同一块内存了,exports指向了新的内存,实际上module.exports也指向了新的内存,但是nodejs中寻找的是module变量下的exports属性所指向的内存块,如果exports和module.exports操作的不是同一个内存块的话,exports就不起作用了,所以不管怎么样,使用module.exports是万无一失的。。。

这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。

站内搜索

没有找到内容!