nodejs模仿commonjs子產品系統,内置的require函數很容易include存在于各個分離的檔案中的子產品。require函數的基本功能是讀取一個javascript檔案并且執行它,傳回exports對象。一個子產品的例子:
是以,如果你運作var example =require(‘./example.js‘),結果是example作為一個對象,它的值等于如下:
如果你想将exports 對象設定為一個函數或者一個新對象,你必須使用moudle.exports對象,舉例:
值得注意的是每次你重複require已經require的檔案時,exports對象會緩存并且重複使用。請看如下解釋:
從上面的例子可以看出,example.js在第一次被 執行,随後的require()調用僅僅觸發了子產品的緩存,而不是重新又讀取該檔案。如上所示,這有時會産生副作用。
require尋找檔案的規則有點複雜。大概的規則是:
(1)如果檔案不是以”/”或”./”開始時,它會認為是一個核心子產品(并且本地的node子產品會被檢測)或者是一個在本地node_moudles目錄中的依賴;
(2)如果檔案是以”./”開始時,它會認為被requre的檔案是一個相對路徑的檔案;
(3)如果檔案是以”/”開始時,它會認為是絕對路徑。注意:你可以省略”.js”,require會根據需要自動加上”.js”。更詳細的資訊請檢視官方文檔。
還有一點需要注意的是:如果傳給require的是一個目錄,它會在目錄中首先尋找package.json,加載main屬性的檔案引用。否則,它會尋找index.js檔案。