前言

近期為了想要調整 bloger 環境,發現近期除了使用yarn外,還有一個新的package manager - pnpm,讓我非常好奇這東西作用以及與npm的差異,因此決定來做一個比較。


npm vs pnpm

1-1 簡介

基本上,不論是官方網與其他網站介紹,pnpm都是一個快速、簡單的Node.js套件管理工具,它使用硬連結和符號連結來減少磁碟空間的使用,並且可以在安裝套件時共享它們。如果要讓 pnpm 使用在 npm 是完全可以不用任何學習語法/指令,因為他們的指令是幾乎一樣的。

npm vs pnpm 比較圖

pnpm 最大特點是創建一個共享儲存位置並將它們鏈接到項目,提升了安裝速度,減少了磁盤空間的使用,解決了 npm 暫取專案的主要原因。

1-1-1 pnpm

pnpm(Performant Node Package Manager)是一個快速、簡單的Node.js套件管理工具,它使用硬連結和符號連結來減少磁碟空間的使用,並且可以在安裝套件時共享它們。npm 的一個缺點是它可能會導致依賴項的重複安裝,這會佔用大量的磁盤空間,特別是在同一台機器上運行多個項目時。這也可能導致安裝時間較長,因為每個項目都需要安裝其自己的依賴項。

  1. 它使用一個全局存儲庫來保存所有包,避免在項目之間重複包。
  2. pnpm 是一個旨在優化磁盤空間使用和安裝時間的替代包管理器。
  3. pnpm 不會複製依賴項,而是使用硬連結和符號連結在項目之間共享依賴項,從而減少磁盤空間的使用。
  4. pnpm 還提供了平面的依賴結構,這意味著沒有嵌套的 node_modules 目錄。

1-1-2 npm

npm(Node Package Manager) 是一個用於 Node.js 的包管理器,它允許開發人員在其項目中安裝、更新和管理依賴項。

  1. 它將每個包單獨安裝在項目的 node_modules 目錄中。
  2. npm 是 Node.js 的默認包管理器,並隨 Node.js 安裝一起提供。
  3. npm 依賴於嵌套的依賴樹,其中每個包都可以擁有自己的依賴項。
  4. 這可能導致依賴關係在項目之間重複,佔用更多的磁盤空間。
【備註】node 安裝 pnpm
1
2
//--- 安裝 ---//
npm install -g pnpm

1-1-3 兩者區別

  1. 磁盤空間:由於使用單個全局存儲和鏈接而不是副本,pnpm 通常比 npm 佔用更少的磁盤空間。
  2. 安裝時間:在某些情況下,尤其是在安裝跨多個共享常見依賴項的依賴項時,pnpm 可能會更快。
  3. 兼容性:儘管 npm 是默認的包管理器並且廣泛支持,但由於其不同的方法,pnpm 可能需要進行調整或額外的配置。
  4. 工作流整合:一些開發人員可能會因為熟悉度和生態系統支持而選擇 npm,而其他人可能會發現 pnpm 的性能優勢超過任何整合問題。

2-1 安裝大小比較

目前要驗證的是安裝大小,因此我們先來看看兩者的安裝大小。

2-1-1 npm 安裝大小

現在我有一個小型專案,只用react輕型的小型專案並且使用npm安裝,目前容量占用為937MB (node_modules)。

2-1-2 pnpm 安裝大小

接下來,我們使用pnpm來安裝相同的專案,看看他的容量占用為多少。

  • 安裝指令 : pnpm install

可以看到,pnpm 安裝後的容量為 638MB,這是因為 pnpm 會將所有的套件安裝在全域的位置,並且使用硬連結和符號連結來減少磁碟空間的使用,並且可以在安裝套件時共享它們。後續專案安裝時,只會將相關的套件連結到專案中,因此不會重複安裝相同的套件。