介紹pnpm,一個可以節省磁碟空間的npm替代方案

最近,我曾提到過我們有著巨大的node_modules文件夾,以及為什麼這並不一定是一個壞事,但是減少硬盤空間的佔用肯定是更好的,對吧?

在硬盤上節省的每一個位元都可以用來存放除了函式庫代碼之外的其他東西,我在2010年購買的MacBook Pro上有一個512GB的SSD,但在2019年,一些全新的電腦只有一個128GB的SSD(當提到硬碟空間時,摩爾定律似乎出了一些問題)。

其中一種方式是將函式庫代碼存儲集中在一個地方,並與您所工作的所有項目共享。這就是pnpm的主要價值主張,您可以在https://pnpm.js.org查看這個很酷的項目。

它基本上是npm的插件,這意味著一旦您安裝了它,您可以調用pnpm install來下載項目依賴,並且所有的操作對您來說都是透明的。

如果您有10個使用相同版本的React的項目,pnpm只會安裝一次,然後在您的所有其他項目中引用那個第一次安裝的項目。

這也意味著,與使用標準的npm過程下載資源相比,項目初始化部分的時間明顯更短。即使使用npm緩存了包,pnpm也會在中央本地文件庫中建立一個硬連結,而npm會從緩存中複製一個包。

當然你可以使用npm工具安裝pnpm:

npm install -g pnpm

因為pnpmnpm的替代方案,所以您可以使用所有npm命令:

pnpm install react
pnpm update react
pnpm uninstall react

等等。

pnpm在那些需要維護大量帶有相同相依項目的公司中尤其受到重視。例如,Glitch就是這樣一家公司,他們托管著無數個Node.js項目。pnpm不僅為他們提供了普通的npm命令,還提供了一些工具,包括pnpm recursive,它用於在文件夾中運行相同的命令以處理所有項目。例如,您可以通過運行pnpm recursive install來初始化存儲在當前文件夾中的100個項目。非常方便。

如果您使用npx,這是執行類似create-react-app這樣的實用程式的便捷(並且被推薦)方法,您可以使用隨pnpm一起的pnpx命令來享受pnpm的好處:

pnpx create-react-app my-cool-new-app

包裝安裝在哪裡?在macOS中,它們安裝在 ~/.pnpm-store/ 文件夾中(其中~代表您的用戶文件夾)。我安裝了lodash作為示例,這是結果的文件夾結構:

➜ ~ tree .pnpm-store/
.pnpm-store/
└── 2
 ├── \_locks
 ├── registry.npmjs.org
 │   └── lodash
 │   ├── 4.17.11
 │   │   ├── integrity.json
 │   │   ├── node\_modules
 │   │   │   └── lodash
 │   │   │   ├── ...
 │   │   ├── package -> node\_modules/lodash
 │   │   └── packed.tgz
 │   └── index.json
 └── store.json

關於該工具還有許多高級功能需要了解,但我希望這能幫助您開始使用pnpm

在日常使用時應該使用它嗎?可能不需要,除非您確實有使用該工具的需求,比如缺少磁碟空間。