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