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