跳至主要內容
版本:9.x

pnpm vs npm

npm 的平面樹

npm 維護一個 扁平化相依樹,版本為 3。這會減少磁碟空間膨脹,但會造成 node_modules 目錄雜亂的副作用。

另一方面,pnpm 使用硬連結和符號連結管理 node_modules,連結到一個全域的磁碟內容可尋址儲存。這讓你獲得遠低於磁碟空間使用量的優點,同時也保持 node_modules 的乾淨。如果你想了解更多,有關於 儲存配置 的文件。

pnpm 適當的 node_modules 結構的優點是,它「有助於避免愚蠢的錯誤」,因為它不可能使用未在專案的 package.json 中指定的模組。

安裝

pnpm 不允許安裝套件而不將它們儲存到 package.json。如果沒有參數傳遞給 pnpm add,套件會儲存為一般相依性。與 npm 一樣,--save-dev--save-optional 可用於將套件安裝為開發或選用相依性。

由於這個限制,專案在使用 pnpm 時不會有任何多餘的套件,除非它們移除相依性並讓它成為孤立的相依性。這就是為什麼 pnpm 的 prune 指令 實作不允許您指定要移除的套件 - 它總是會移除所有多餘和孤立的套件。

目錄相依性

目錄相依性以 file: 前綴開頭,並指向檔案系統中的目錄。與 npm 一樣,pnpm 會建立這些相依性的符號連結。與 npm 不同,pnpm 不會為檔案相依性執行安裝。

這表示如果您有一個稱為 foo (<root>/foo) 的套件,其相依性為 bar@file:../bar,則當您對 foo 執行 pnpm install 時,pnpm 不會對 <root>/bar 執行安裝。

如果您需要同時在多個套件中執行安裝,例如在單一儲存庫的情況下,您應該查看 pnpm -r 的文件。