Nodejs 模塊大概可分爲4種:
a) builtin module Nodejs中以C++形式提供的文件模塊。
b) constant module Nodejs中定義常量的文件模塊。
c) native module Nodejs中以javascript形式提供的核心模塊。
d) 第三方module 由第三方提供的文件模塊。
一、模塊加載步驟
1、路徑查找
文件查找是先查找當前目錄的node_modules,然後查找父目錄的node_modules,然後逐級向上查找
2、文件定位
1) 緩存
2) 如果是絕對路徑, 則直接按路徑讀取並編譯
3) 如果是“/”則直接從/node_modules目錄查找
4) 如果是相對路徑, 則生成如下查詢規則,
[
‘/home/myapp/mydir/node_module‘,
‘/home/myapp/node_module‘
‘/home/node_module‘,
‘/node_module‘
]
5) 從上述數組中取出第一個目錄作爲查找對象, 如果存在結束查找
6) 然後依次嘗試添加.js、.json、.node後綴繼續查找, 如果存在則結束
7) 嘗試將require參數作爲一個包查找, 讀取目錄下的package.json文件, 取得main參數指定的文件
8) 根據指定的文件未找到, 如果沒有,執行第6步
9) 如果main參數不存在或者第8步未找到, 則查找該目錄下index文件, 如果沒有, 執行第6步
10) 如果依然沒有找到, 則開始取出數組第二條路徑, 然後執行5-7步。 直到數組中最後一個值
11) 如果還沒找到, 拋出異常
3、模塊編譯
編譯分爲三種情況,js模塊、c/c++模塊、json模塊
4、模塊緩存
核心模塊編譯成功後緩存在NativeModule._cache
下
文件模塊編譯成功後緩存在Module._cache
下