module.exports和exports

Posted 游鱼与渔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了module.exports和exports相关的知识,希望对你有一定的参考价值。

require 用来加载代码,而 exports 和 module.exports 则用来导出代码。但很多新手可能会迷惑于 exports 和 module.exports 的区别,为了更好的理解 exports 和 module.exports 的关系。

一开始我没有理解,原因是我没有明白nodejs 是怎么创建module.exports 和 exports,并且二者关系是怎么样的.

其实,系统自动给nodejs 文件增加2个变量 exports 和 module, module 又有一个属性 exports, 这个exports 属性指向一个空对象 {}; 同时 exports这个变量也指向了这个空对象{};

于是就有了 exports => {} <=module.exports.

这2个exports 其实是没有直接关系的,唯一的关系是: 他们初始都指向同一个空对象{}; 如果其中一个不指向做个空对象了, 那么他们的关系就没有了.

我们经常看到这样的写法:

exports = module.exports = somethings

 

上面的代码等价于:

module.exports = somethings
exports = module.exports

 

原理很简单,即 module.exports 指向新的对象时,exports 断开了与 module.exports 的引用,那么通过 exports = module.exports 让 exports 重新指向 module.exports 即可

以上是关于module.exports和exports的主要内容,如果未能解决你的问题,请参考以下文章

关于exports 和 module.exports

exports 和 module.exports 的区别

exports 和 module.exports 的区别

exports 和 module.exports 的区别

module.exports 与 exports区别

nodejs exports与module.exports的区别