摘錄自:https://mp.weixin.qq.com/s/5tmND0G_ZkYVR7Dmug0ugQ
首先檢查 .npmrc 文件
優先級為:項目級的 .npmrc 文件 > 用戶級的 .npmrc 文件> 全局級的 .npmrc 文件 > npm 內置的 .npmrc 文件
檢查項目中有無 lock 文件。
若無 lock 文件
a. 則從 npm 遠程倉庫獲取包信息。
b. 根據 package.json 構建依賴樹,構建過程:
- 構建依賴樹時,不管其是直接依賴還是子依賴的依賴,優先將其放置在 node_modules 根目錄。
- 當遇到相同模塊時,判斷已放置在依賴樹的模塊版本是否符合新模塊的版本范圍,如果符合則跳過,不符合則在當前模塊的 node_modules 下放置該模塊。
- 注意這一步只是確定邏輯上的依賴樹,並非真正的安裝,后面會根據這個依賴結構去下載或拿到緩存中的依賴包
c. 接着 在緩存中依次查找依賴樹中的每個包。
若存在緩存:將緩存按照依賴結構解壓到 node_modules;
若不存在緩存:
- 從 npm 遠程倉庫下載包
- 校驗包的完整性
- 校驗不通過則重新下載
- 校驗通過:將下載的包復制到 npm 緩存目錄,將下載的包按照依賴結構解壓到 node_modules
d. 將包解壓到 node_modules
e. 生成 lock 文件
若有 lock 文件:
- 檢查 package.json 中的依賴版本是否和 package-lock.json 中的依賴有沖突。
- 如果沒有沖突,直接跳過獲取包信息、構建依賴樹過程,開始在緩存中查找包信息,后續過程相同