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
的文件。