在文件模塊緩存中加載
盡管原生模塊與文件模塊的優先級不同, 但是都不會優先于從文件模塊的緩存中輥載已經存在的模塊。
從原生模塊加載
原生模塊的優先級僅次于文件模塊緩存的優先級。require方法在解析文件名之后, 優先檢查模塊是否在原生的模塊列表中。 以http模塊為例, 盡管在目錄下存在一個http/http.js/http.node/http.json文件,require('http')都不會從這些文件中加載, 而是從原生模塊中輥載, 原生模塊也有一個緩存區, 同樣也是優先從緩存區加載, 如果緩存區沒有被加載過, 則調用原生模塊的加載方法進行加載和執行。
從文件加載
當文件模塊緩存中不存在, 而且不是原生模塊的時候, Node.js會解析require方法傳入的參數,并從文件系統 中加載實際的文件, 加載過程中的包裝和編譯細節在前一節中已經介紹過,這里我們將詳細描述文件模塊的過和, 其中,也有一些細節值得知曉。
require方法接受以下幾種參數的傳遞:
- http、fs 、path 等, 原生模塊
- ./mod 或 ../mod, 相對路徑的文件模塊。
- /pathtomodule/mod, 絕對路徑的文件模塊。
- mod, 非原生模塊的文件模塊