Node之CommonJS,為什麼模組該這麼寫

糯米糰先生發表於2020-11-28

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的內容就是這些了,也算是一些比較常用的吧

相關文章