NPM是什么
- NPM的全稱是Node Package Manager,是Node.js的一個包管理工具,它是隨Node一起安裝的。
NPM能做什么
- 從NPM服務(wù)器下載別人寫好的包或命令行程序到本地直接使用。
- 將自己寫好的包或命令行程序上傳到NPM服務(wù)器供別人使用。
NPM組成部分
- npm官網(wǎng)
- 注冊表(注冊表相當(dāng)于一個大型的公用數(shù)據(jù)庫,記錄了JavaScript組件的一些元信息)
- 命令行工具
使用NPM命令安裝依賴模塊
- 安裝
npm install <Module Name>
- 引入
var mModule = require('Module Name');
package-lock.json
項目中安裝依賴后在自動生成package-lock.json文件,里面包含安裝的依賴信息,主要是用來鎖定依賴版本,確保團(tuán)隊之間安裝依賴時不會出現(xiàn)差異。
npm install原理
整體流程:
檢查 .npmrc 文件:優(yōu)先級為:項目級的 .npmrc 文件 > 用戶級的 .npmrc 文件> 全局級的 .npmrc 文件 > npm 內(nèi)置的 .npmrc 文件
檢查項目中有無 lock 文件。
-
無 lock 文件:
從 npm 遠(yuǎn)程倉庫獲取包信息
-
根據(jù) package.json 構(gòu)建依賴樹,構(gòu)建過程:
構(gòu)建依賴樹時,不管其是直接依賴還是子依賴的依賴,優(yōu)先將其放置在 node_modules 根目錄。
當(dāng)遇到相同模塊時,判斷已放置在依賴樹的模塊版本是否符合新模塊的版本范圍,如果符合則跳過,不符合則在當(dāng)前模塊的 node_modules 下放置該模塊。
注意這一步只是確定邏輯上的依賴樹,并非真正的安裝,后面會根據(jù)這個依賴結(jié)構(gòu)去下載或拿到緩存中的依賴包
在緩存中依次查找依賴樹中的每個包
-
不存在緩存:
從 npm 遠(yuǎn)程倉庫下載包
-
校驗包的完整性
校驗不通過:
重新下載
校驗通過:
將下載的包復(fù)制到 npm 緩存目錄
將下載的包按照依賴結(jié)構(gòu)解壓到 node_modules
存在緩存:將緩存按照依賴結(jié)構(gòu)解壓到 node_modules
將包解壓到 node_modules
生成 lock 文件
-
有 lock 文件:
檢查 package.json 中的依賴版本是否和 package-lock.json 中的依賴有沖突。
如果沒有沖突,直接跳過獲取包信息、構(gòu)建依賴樹過程,開始在緩存中查找包信息,后續(xù)過程相同