摘要:一個(gè)模塊兒真正導(dǎo)出的是的值,只是的一個(gè)引用可以簡單理解為下面這種對(duì)象引用和賦值的區(qū)別只是的一個(gè)引用。已經(jīng)跟脫離沒有關(guān)系了所以經(jīng)常會(huì)看到模塊兒里會(huì)像下面這樣來導(dǎo)出模塊兒。
module
在 Node.js 模塊系統(tǒng)中,每個(gè)文件都視為獨(dú)立的模塊,node在運(yùn)行某個(gè)模塊兒時(shí)會(huì)生成一個(gè)module對(duì)象
Module { id: ".", exports: 2, parent: null, filename: "/Users/leinov/github/node-api/module/module.js", loaded: false, children: [ Module { id: "/Users/leinov/github/node-api/module/circle.js", exports: [Object], parent: [Circular], filename: "/Users/leinov/github/node-api/module/circle.js", loaded: true, children: [], paths: [Array] } ], paths: [ "/Users/leinov/github/node-api/module/node_modules", "/Users/leinov/github/node-api/node_modules", "/Users/leinov/github/node_modules", "/Users/leinov/node_modules", "/Users/node_modules", "/node_modules" ] }
id為當(dāng)前文件
exports為當(dāng)前node文件模塊兒導(dǎo)出的值
parent為父級(jí)調(diào)用,如果為null則該文件沒有被調(diào)用
filename為當(dāng)前文件名
loaded是否被加載
children 引入模塊數(shù)組,數(shù)組項(xiàng)格式同module
paths為node模塊兒 node_modules 模塊兒查找路徑,一直查到根目錄
module.exports & exportsNode里面的模塊系統(tǒng)遵循是CommonJs規(guī)范,CommonJs定義的模塊分為: 模塊標(biāo)識(shí)(module)、模塊定義(exports) 、模塊引用(require),在模塊兒運(yùn)行的時(shí)候都會(huì)生成一個(gè)module對(duì)象和一個(gè)exports對(duì)象,module對(duì)象下也有一個(gè)exports對(duì)象,默認(rèn)情況下這兩個(gè)對(duì)象都是空對(duì)象。如果有引用其他模塊兒或定義模塊兒 即module.exports或者exports被賦值時(shí),則該模塊兒就是一個(gè)有效的帶有返回值的模塊兒。
一個(gè)模塊兒真正導(dǎo)出的是module.exports的值,exports只是module.exports的一個(gè)引用
可以簡單理解為下面這種對(duì)象引用和賦值的區(qū)別
let obj1 = {a=1}; let obj2 = obj1; console.log(obj1,obj2); // {a:1} {a:1} obj2.a = 2 console.log(obj1,obj2); // {a:2} {a:2} obj2 = {b:3} console.log(obj1,obj2); // {a:2} {b:3}
obj2只是obj1的一個(gè)引用。當(dāng) obj2.a 改變時(shí)其實(shí)改變的是 obj1 和 obj2 都指向的同一個(gè)堆里的數(shù)據(jù)。但 obj2 ={b:3} 則重新在堆里開辟了另一個(gè)內(nèi)存塊兒來存儲(chǔ)。已經(jīng)跟 obj1 脫離沒有關(guān)系了
所以經(jīng)常會(huì)看到node模塊兒里會(huì)像下面這樣來導(dǎo)出模塊兒。
exports = module.exports = ()=>{ do something }
這是為了讓exports引用指向module.exports同一塊內(nèi)存,確保數(shù)據(jù)的一致性。
總結(jié)在執(zhí)行 node 文件時(shí)同事創(chuàng)建了 module.exports 和 exports 對(duì)象
exports 是指向 module.exports 的一個(gè)引用
require("xxx") 其實(shí)引用的是xxx中的 module.exports 而非 exports
github nodejs文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99931.html
摘要:在博客閱讀這個(gè)小短文用于快速理解模塊也就是規(guī)范。本質(zhì)用于暴露一個(gè)值,這個(gè)值默認(rèn)是對(duì)象,也可以覆蓋為原始值。最后提醒,如果前面說的看不懂,可能需要加深對(duì)引用值和原始值的理解 在博客閱讀:https://ssshooter.com/2019-03... 這個(gè)小短文用于快速理解 nodejs 模塊(也就是 CommonJS 規(guī)范)。 本質(zhì) module.exports 用于暴露一個(gè)值,這個(gè)值...
摘要:歡迎來我的博客閱讀開發(fā)者所需要知道的一是一款擁有自動(dòng)垃圾回收功能的編程語言。它隨著的第一版發(fā)布而發(fā)布以及開源。年月,基金宣布和合并,合并版本在未來發(fā)布。年月日,官方公布又一個(gè)新的名為的優(yōu)化編譯器,主要提供的新語法,以及提高性能。 歡迎來我的博客閱讀:「JavaScript 開發(fā)者所需要知道的 V8(一):V8 In NodeJS」 Motivation JavaScript 是一款擁有...
摘要:流程源處理源代碼,例如過濾任何值。工藝類從編譯后處理生成的文件,例如對(duì)類進(jìn)行字節(jié)碼增強(qiáng)。整合后的測試執(zhí)行集成測試后執(zhí)行所需的操作。校驗(yàn)運(yùn)行任何檢查以驗(yàn)證包裝是否有效并符合質(zhì)量標(biāo)準(zhǔn)。 nodejs和es6 nodejs的語法和es6不一樣,如模塊系統(tǒng),一個(gè)是CommonJS的require、一個(gè)是es6的import,寫模塊也不一樣。 nodejs的npm 我來理解,nodejs類似與j...
摘要:鮮花總需要綠葉襯托的,對(duì)比的包依賴管理,頓時(shí)覺得包依賴機(jī)制真是漂亮。此文不吐槽的包管理是如何難用和混亂,也不去抨擊包管理的孱弱,僅僅討論如何優(yōu)雅地使用進(jìn)行包依賴管理。 鮮花總需要綠葉襯托的,對(duì)比php, java, python的包依賴管理,頓時(shí)覺得nodejs包依賴機(jī)制真是漂亮。此文不吐槽python的包管理是如何難用和混亂,也不去抨擊php包管理的孱弱,僅僅討論如何優(yōu)雅地使用npm...
摘要:要求模塊編寫必須在真正的代碼之外套上一層規(guī)定的代碼包裝,樣子看起來是這樣的模塊代碼通過傳遞一個(gè)簽名為的回調(diào)函數(shù)給函數(shù),就可以把需要注入的變量和函數(shù)注入到模塊代碼內(nèi)。 之前寫的文章急速Js全棧教程得到了不錯(cuò)的閱讀量,霸屏掘金頭條3天,點(diǎn)贊過千,閱讀近萬,甚至還有人在評(píng)論區(qū)打廣告,可見也是一個(gè)小小的生態(tài)了;)??磥砗蚃S全棧有關(guān)的內(nèi)容,還是有人頗有興趣的。 showImg(https://...
閱讀 3030·2021-11-24 10:32
閱讀 688·2021-11-24 10:19
閱讀 5134·2021-08-11 11:17
閱讀 1467·2019-08-26 13:31
閱讀 1268·2019-08-23 15:15
閱讀 2293·2019-08-23 14:46
閱讀 2277·2019-08-23 14:07
閱讀 1095·2019-08-23 14:03