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的內容就是這些了,也算是一些比較常用的吧
相關文章
- Koala Framework是什麼?我為什麼要寫這個框架?Framework框架
- Nginx 為什麼這麼快?Nginx
- Redis為什麼這麼快?Redis
- 為什麼前端這麼多人前端
- 為什麼要用Node.jsNode.js
- 為什麼要用 Node.jsNode.js
- 為什麼用Node.js?Node.js
- 03_Node js 模組化 CommonJSJS
- 為什麼程式設計師應該寫部落格?用什麼部落格系統?程式設計師
- 為什麼Python這麼慢?Python
- 為什麼 Python 這麼慢?Python
- 快速排序為什麼這麼快?排序
- IPP SWAP】為什麼這麼火爆 ||
- 為什麼 Laravel 這麼優秀Laravel
- CSS 為什麼這麼難學?CSS
- webpack 為什麼這麼難用?Web
- 為什麼 CSS 這麼難學?CSS
- 為什麼 Python 這麼火Python
- 雲列印為什麼這麼便宜?
- 為什麼程式設計師應該少寫程式碼程式設計師
- python有什麼特性?為什麼這麼火?Python
- Python是什麼?為什麼這麼搶手?Python
- 為什麼要使用模組模式?模式
- 為什麼要用Redis?Redis為什麼這麼快?(來自知乎)Redis
- 為什麼要使用Node.JSNode.js
- 為什麼要使用 Node.jsNode.js
- Python能幹什麼?為什麼會這麼火?Python
- 今年找工作為什麼這麼難?
- 為什麼凸優化這麼重要?優化
- 為什麼Julia語言這麼棒?
- 為什麼 JavaScript 的 this 要這麼用?JavaScript
- Spring Boot 為什麼這麼火?Spring Boot
- 為什麼HTML5這麼火?HTML
- 解析:Python為什麼這麼流行?Python
- 為什麼 .NET 的反射這麼慢?反射
- 你家的WiFi為什麼這麼慢?WiFi
- 為什麼有這麼多 Python?Python
- Exadata為什麼這麼牛B