require的加載流程

在文件模塊緩存中加載

盡管原生模塊與文件模塊的優先級不同, 但是都不會優先于從文件模塊的緩存中輥載已經存在的模塊。

從原生模塊加載

原生模塊的優先級僅次于文件模塊緩存的優先級。require方法在解析文件名之后, 優先檢查模塊是否在原生的模塊列表中。 以http模塊為例, 盡管在目錄下存在一個http/http.js/http.node/http.json文件,require('http')都不會從這些文件中加載, 而是從原生模塊中輥載, 原生模塊也有一個緩存區, 同樣也是優先從緩存區加載, 如果緩存區沒有被加載過, 則調用原生模塊的加載方法進行加載和執行。

從文件加載

當文件模塊緩存中不存在, 而且不是原生模塊的時候, Node.js會解析require方法傳入的參數,并從文件系統 中加載實際的文件, 加載過程中的包裝和編譯細節在前一節中已經介紹過,這里我們將詳細描述文件模塊的過和, 其中,也有一些細節值得知曉。
require方法接受以下幾種參數的傳遞:

  • http、fs 、path 等, 原生模塊
  • ./mod 或 ../mod, 相對路徑的文件模塊。
  • /pathtomodule/mod, 絕對路徑的文件模塊。
  • mod, 非原生模塊的文件模塊
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容