Node.js require方法中的文件查找策略

因爲Node.js中存在4類模塊(原生模塊和3種文件模塊),require方法使用簡單,內部的加載過程仍是值得了解的,其加載優先級也各自不一樣。以下圖所示:node

從文件模塊緩存中加載

儘管原生模塊與文件模塊的優先級不一樣,可是都不會優先於從文件模塊的緩存中加載已經存在的模塊。json

從原生模塊加載

原生模塊的優先級僅次於文件模塊緩存的優先級。require方法在解析文件名以後,優先檢查模塊是否在原生模塊列表中。以http模塊爲例,儘管在目錄下存在一個http/http.js/http.node/http.json文件,require("http")都不會從這些文件中加載,而是從原生模塊中加載。緩存

原生模塊也有一個緩存區,一樣也是優先從緩存區加載。若是緩存區沒有被加載過,則調用原生模塊的加載方式進行加載和執行。ui

從文件加載

當文件模塊緩存中不存在,並且不是原生模塊的時候,Node.js會解析require方法傳入的參數,並從文件系統中加載實際的文件,加載過程當中的包裝和編譯細節要了解一下,這裏咱們將詳細描述查找文件模塊的過程,其中,也有一些細節值得知曉。spa

require方法接受如下幾種參數的傳遞:編譯

  • http、fs、path等,原生模塊。
  • ./mod或../mod,相對路徑的文件模塊。
  • /pathtomodule/mod,絕對路徑的文件模塊。
  • mod,非原生模塊的文件模塊。
相關文章
相關標籤/搜索