詳解Node.js中exports和module.exports的區(qū)別
今天看了下node.js的require
方法的源碼,終于搞清楚exports和module.exports的區(qū)別了。
我們知道,node.js的模塊暴露有兩種方法。
1. 方式一:用exports
//a.js exports.log =function (str) { console.log(str); }
//b.js var s = require("./a"); s.log("哈哈哈哈");
2. 方式二:用module.exports
//a.js module.exports = function (str) { console.log(str); } //b.js var s = require("./a"); s("嘻嘻嘻嘻");
如果將第一種方式的exports按照第二種方式寫(xiě)成下面這樣就會(huì)出錯(cuò):
//a.js exports = function (str) { console.log(str); } //b.js var s = require("./a"); s("哈哈哈哈");
exports
和module.exports
的初始值指向的是空對(duì)象,即{}
。從源碼可以看到,其實(shí)模塊的require
方法實(shí)質(zhì)上是調(diào)用了_load
方法,而_load
方法,最終返回的是module.exports
來(lái)分析一下出錯(cuò)的原因。
由于最開(kāi)始的時(shí)候,exports
和module.exports
都指向同一個(gè)對(duì)象。
第一種方式,是在給這個(gè)空對(duì)象{}
添加屬性,又因?yàn)?code>module.exports也是指向這個(gè)對(duì)象的,所以最終require
方法返回的module.exports
是指向了這個(gè)具有log
方法的對(duì)象的,可以引用到模塊。
第二種方式是讓module.exports
指向一片新的內(nèi)存空間,exports
指向的仍然是{}
,但是由于require
方法返回的是module.exports
,所以最終也能引入模塊。
但是最后那種寫(xiě)法是讓exports
指向一片新的內(nèi)存空間,module.exports
指向的仍然還是{}
,那么最終require
方法是將module.exports
返回,所以會(huì)導(dǎo)致報(bào)錯(cuò),說(shuō)s不是一個(gè)function。
所以:
請(qǐng)牢記:require
方法返回的是module.exports
!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- CommonJS與ES6?Module的使用區(qū)別分析
- JavaScript ES6 Module模塊詳解
- node.js的exports、module.exports與ES6的export、export default深入詳解
- ES6入門(mén)教程之Class和Module詳解
- ES6中module模塊化開(kāi)發(fā)實(shí)例淺析
- ES6新特性之模塊Module用法詳解
- Node.JS中的模塊、exports和module講解
- Node.js?中的?module.exports?與?exports區(qū)別介紹
- Node.js中module.exports?和exports使用誤區(qū)
- Node.js 中exports 和 module.exports 的區(qū)別
- node.js中module.exports與exports用法上的區(qū)別
- module.exports和exports使用誤區(qū)案例分析
相關(guān)文章
Nuxt配合Node在實(shí)際生產(chǎn)中的應(yīng)用詳解
這篇文章主要介紹了Nuxt配合Node在實(shí)際生產(chǎn)中的應(yīng)用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08初學(xué)者如何快速搭建Express開(kāi)發(fā)系統(tǒng)步驟詳解
這篇文章主要介紹了初學(xué)者如何快速搭建Express開(kāi)發(fā)系統(tǒng),結(jié)合實(shí)例形式詳細(xì)分析了express框架搭建的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2023-05-05node.js三個(gè)步驟實(shí)現(xiàn)一個(gè)服務(wù)器及Express包使用
這篇文章主要介紹了node.js三個(gè)步驟實(shí)現(xiàn)一個(gè)服務(wù)器及Express包使用,文章通過(guò)新建一個(gè)文件展開(kāi)全文內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05