CommonJS規範
Node 應用由模塊組成,採用 CommonJS 模塊規範。
每個文件就是一個模塊,有自己的作用域。在一個文件裏面定義的變量、函數、類,都是私有的,對其他文件不可見。
如果想在多個文件分享變量,必須定義爲global
對象的屬性。
CommonJS模塊的特點如下。
- 所有代碼都運行在模塊作用域,不會污染全局作用域。
- 模塊可以多次加載,但是只會在第一次加載時運行一次,然後運行結果就被緩存了,以後再加載,就直接讀取緩存結果。要想讓模塊再次運行,必須清除緩存。
- 模塊加載的順序,按照其在代碼中出現的順序。
CommonJS規範規定,每個模塊內部,module
變量代表當前模塊。這個變量是一個對象,它的exports
屬性(即module.exports
)是對外的接口。加載某個模塊,其實是加載該模塊的module.exports
屬性。每個模塊內部,都有一個module
對象,代表當前模塊。它有以下屬性。
module.id
模塊的識別符,通常是帶有絕對路徑的模塊文件名。module.filename
模塊的文件名,帶有絕對路徑。module.loaded
返回一個布爾值,表示模塊是否已經完成加載。module.parent
返回一個對象,表示調用該模塊的模塊。module.children
返回一個數組,表示該模塊要用到的其他模塊。module.exports
表示模塊對外輸出的值。- module.exports屬性:表示當前模塊對外輸出的接口,其他文件加載該模塊,實際上就是讀取
module.exports
變量。 - exports變量
- AMD規範與CommonJS規範的兼容性
- require命令:
require
方法用於加載模塊。 - 基本用法
- 加載規則
- 目錄的加載規則
- 模塊的緩存
- 環境變量NODE_PATH
- 模塊的循環加載
- require.main
- 模塊的加載機制
- require的內部處理流程