Node之CommonJS,為什麼模組該這麼寫
2020.11.14
CommonJS規範
Node應用由模組組成,採用CommonJS模板規範
每個檔案就是一個模組,有自己的作用域。在一個檔案裡定義的數量、函式、類,都是私有的,對其他檔案不可見
用 global 物件定義的屬性可以在多個檔案分享變數。
CommonJS規範規定,在每個模組內部,module變數代表當前模組,這個變數是一個物件,exports就是一個對外的介面,載入模組的時候其實也就是載入這個模組的屬性。
特點:
- 所有的程式碼都執行在模組的作用域,不會汙染全域性作用域
- 模組可以被多次載入,但是隻會在第一次載入的時候執行,然後結果就被快取了,再次載入就是讀取快取中的內容了
- 模組載入的順序,是按照其在程式碼中的出現的順序載入的
關於module物件
就是node內部提供的一個Module構建函式,所有模組都是Module的例項
module.id 模組的識別符,通常是帶有絕對路徑的模組檔名。
module.filename 模組的檔名,帶有絕對路徑。
module.loaded 返回一個布林值,表示模組是否已經完成載入。
module.parent 返回一個物件,表示呼叫該模組的模組。
module.children 返回一個陣列,表示該模組要用到的其他模組。
module.exports 表示模組對外輸出的值。
module.exports
表示當前模組對外輸出的介面,其他檔案載入該模組,實際上就是讀取module.exports變數
exports變數
每個模組都會有一個exports變數,指向module.exports。
- CommonJS規範載入模組是同步的,也就是說,只有載入完成,才能執行後面的操作。
- AMD規範則是非同步載入模組,允許指定回撥函式。
require命令
請求module.exports丟擲來的物件,也就是說用於接收對應的物件。
- 載入檔案時,字尾名預設為 .js ,
- 其中/開頭表示的時絕對路徑, ./ 開頭的就是相對路徑
- 如果引數字串不以“./“或”/“開頭,則表示載入的是一個預設提供的核心模組
目錄載入規則
在packjson檔案中,會有入口檔案,也就是說檔案就是從這個地方進去的
大致CommonJS的內容就是這些了,也算是一些比較常用的吧
相關文章
- 03_Node js 模組化 CommonJSJS
- 前端模組化之CommonJS前端JS
- 模組化之AMD、CMD、UMD、commonJSJS
- CommonJS模組 和 ECMAScript模組JS
- 為什麼要使用模組模式?模式
- 什麼是模組?Python模組分為哪幾類?Python
- 區塊鏈為什麼模組化?區塊鏈
- 編寫Node原生模組
- node之path模組
- 前端為什麼需要模組化開發前端
- 為什麼JavaScript需要模組化開發?JavaScript
- 【node】模組解析之 httpHTTP
- OA系統為什麼有流程管理模組?
- 為什麼要用Node.jsNode.js
- 為什麼用Node.js?Node.js
- 一文告訴你智慧語音中的VAD模組為什麼這麼重要
- Commonjs規範與模組化JS
- Nginx 為什麼這麼快?Nginx
- Redis為什麼這麼快?Redis
- 為什麼 Python 這麼慢?Python
- 為什麼Python這麼慢?Python
- 為什麼Julia這麼快?
- 為什麼前端這麼多人前端
- 為什麼python中使用模組無法識別Python
- Electron團隊為什麼要幹掉remote模組REM
- Node那些事之模組化
- Python是什麼?為什麼這麼搶手?Python
- python有什麼特性?為什麼這麼火?Python
- ES6模組與commonJS模組的差異JS
- Python中模組是什麼?Python有哪些模組?Python
- 為什麼要使用Node.JSNode.js
- 為什麼要這樣寫final ReentrantLock lock = this.lock; ?ReentrantLock
- 為什麼要寫作
- ippswap dapp為什麼這麼火?APP
- IPP SWAP】為什麼這麼火爆 ||
- 為什麼 Laravel 這麼優秀Laravel
- 所以,chatGPT為什麼這麼火?ChatGPT
- 雲列印為什麼這麼便宜?