還在為npm i安裝大量依賴等待時間較長,npm扁平化node_modules依賴版本衝突在苦惱嗎,不用苦惱pnpm為你保駕護航 ...
作者:京東科技 於振京
受眾簡介
- 前端研發工程師
還在為
npm i
安裝大量依賴等待時間較長,npm
扁平化node_modules
依賴版本衝突在苦惱嗎,不用苦惱pnpm
為你保駕護航
-
主要影響:安裝依賴包的過程,假如使用的是npm install會根據package-lock.json進行軟體包的安裝,如果沒有package-lock.json會根據package.json進行生成並對安裝的依賴包扁平化處理,安裝依賴包的時長由兩個因素導致:
1.package.json依賴包的量
2.網速 -
運維工程師
前端伺服器由於部署工程較多,依賴包占用磁碟空間太大,不夠用怎麼辦,還在花錢申請擴容嗎,使用
pnpm
解決你的問題
主要影響:構建前端工程時jenkin任務一般會清除伺服器的node_modules然後重新安裝依賴,避免構建最新分支代碼缺少依賴,另外一臺伺服器可能會部署很多前端工程,這樣就會存在不同工程中安裝了相同的依賴浪費伺服器磁碟空間
沒用pnpm時
我們使用以下幾種工具管理依賴包
-
npm:
nodejs
自帶工具,萬物之主它的誕生給前端帶來了春天 -
npx:與
npm
同根同源,區別在於npm
將依賴安裝在本地,而npx
避免了本地安裝,直接對依賴包定址執行 -
nrm:
npm
的鏡像源管理工具,使用它可以快速切換npm
源 -
cnpm:淘寶鏡像包管理工具
-
yarn:facebook推出的包管理工具,曾風靡一時
由於本章的主角是pnpm以上工具不做詳細介紹,但以上包管理工具都有以下幾個問題
安裝包耗時較長,雖yarn做了下載優化和緩存,但與pnpm相比還是略遜一些
占用存儲空間較大,當開發機或伺服器前端工程較多時,工程越多冗餘包就會越多
扁平化處理,npm v3之後引入了扁平化機制,解決地域依賴問題,但又帶來了以下幾個問題
-- 依賴結構的不確定性
-- 扁平化演算法本身複雜性很高,耗時較長
-- 項目中仍然可以非法訪問沒有聲明過依賴的包 (幽靈依賴
)
用了pnpm後
我們會得到以下幾個buff
加持
-
快速:官網解釋:比其他包管理模塊快2倍
-
高效:通過軟硬鏈接定址存儲庫,已達到節省磁碟的目的
-
嚴格:
pnpm
預設創建了一個非平鋪的node_modules
,因此避免了相同插件不同版本引用不對稱的問題,此設計完美解決了地域依賴
和幽靈依賴
認識軟硬鏈接
對於pnpm為什麼能達到【快速】和【高效】,就需要認識下軟鏈接
和硬鏈接
了
- 硬鏈接
電腦文件系統中的多個文件共用一個文件存儲單元
window: mklink /H aaa_hard.js aaa.js
macos: ln aaa.js aaa_hard.js
- 軟鏈接
以絕對或者相對路徑的形式指向其他文件目錄的引用
window: mklink aaa_soft.js aaa.js
macos: ln -s aaa.js aaa_soft.js
在執行pnpm install
或pnpm add <pkg>
命令時,PNPM會自動使用硬鏈接、軟鏈接的方式管理依賴包
npm與pnpm命令對比
pnpm官網:https://pnpm.io/zh/
收益
上圖是同一個工程使用npm和pnpm所需時間比較,npm耗時
179.612
秒而pnpm只需要27.3
秒