•
pnpm 對決 npm:開發者必知的五大優勢
5 分鐘閱讀 •
我最喜歡問這種「why A over B」的問題了 😝
效能優勢
pnpm(Performant NPM)是一個比 npm 更高效的套件管理工具。它的安裝速度明顯快於 npm,特別是在處理大型專案時,pnpm 的表現可以達到比 npm 快 3 倍的效能1。這主要歸功於 pnpm 獨特的依賴項管理方式和快取策略23。
磁碟空間使用效率
pnpm 採用了一種獨特的依賴項管理方法,它不會為每個專案創建單獨的套件副本,而是將所有套件存儲在全局的內容可尋址存儲中,並在專案目錄中創建符號連結2。這種方法大幅減少了重複性,節省了大量磁碟空間45。
具體來說,pnpm 使用「硬連結」(hard linking)技術將套件存儲在全局倉庫中,當你下載一個依賴項時,pnpm 會先檢查該依賴項是否已存在於全局倉庫中,如果找到了,pnpm 就會通過創建硬連結來獲取它,而不是重新下載53。
更嚴格的依賴解析
pnpm 實施了更嚴格的依賴解析機制,這有助於防止由版本不匹配引起的問題2。與 npm 使用的扁平化 node_modules 結構不同,pnpm 的依賴樹算法更簡單,實現和維護起來更容易,需要的計算量也更少1。
npm 的扁平化依賴樹會導致一些問題:
工作區支援
pnpm 內建支援管理單一儲存庫中的多個套件(monorepo),這對於管理相互依賴的套件或微服務的專案非常有用23。它使用 pnpm-workspace.yaml
文件進行更靈活的工作區定義,而 npm 則使用 package.json 中的 workspaces 字段5。
易於修補依賴
pnpm 允許你比 npm 更容易地「修補」(patch)你的依賴項,這是 pnpm 的一個經常被低估的優勢6。
使用建議
如果你考慮從 npm 切換到 pnpm,需要注意以下幾點:
- pnpm 使用自己的鎖定文件(pnpm-lock.yaml),而 npm 使用 package-lock.json7。
- 在團隊中工作時,最好所有開發者使用相同的套件管理器,否則可能會遇到問題7。
- 可以使用
pnpm import
命令將 lockfile.json 轉換為 pnpm-lock.yaml7。
結論
pnpm 是 npm 的「高效能」版本,它保留了 npm 的所有優點,同時解決了其弱點。從基準測試結果來看,pnpm 在整體表現上明顯優於 npm 和 yarn3。這就是為什麼像 Vue3、Prism 和微軟等大型科技公司正在迅速採用 pnpm 的原因3。
如果你正在尋找一個更快、更節省磁碟空間且依賴管理更嚴格的套件管理器,pnpm 是一個值得考慮的選擇。無論你是獨立開發者還是大型團隊的一員,探索 pnpm 都可能對優化你的 Node.js 開發工作流程有所幫助5。 Choosing the Right Package Manager: NPM, Yarn, or PNPM? ↩ ↩2 ↩3 Why you should prefer using pnpm over npm and yarn? | Refine ↩ ↩2 ↩3 ↩4 ↩5 ↩6 Meet PNPM: The Faster, More Performant NPM | Bits and Pieces ↩ What is PNPM and why you should use it? - Peerlist ↩ ↩2 ↩3 ↩4 Is there any gotcha if I switch from npm to pnpm? And can I ... ↩ ↩2 ↩3