Skip to content
認識 Node.js 的 Package Manager
📆 2024-10-15 | Node.js

使用 JS 開發專案時,我們經常需要安裝第三方套件來擴充功能,使用 Package Manager 可以讓我們更方便的管理套件版本並確保相容性。

認識 Node Package Manager (npm)

Node.js 的 Package Manager 稱為 npm,是 Node.js 的官方套件管理工具,提供了一個龐大的套件庫供開發者使用,並且可以透過 npm 安裝、更新、移除套件。所有可供下載的套件都會放在 npm 的官方網站 npmjs.com 上。

當你完成 Node 的安裝 (參考用 NVM 管理 Node.js 版本),npm 也會一併安裝在你的電腦上,你可以透過以下指令來確認 npm 是否已經安裝:

bash
npm -v

如果你看到 npm 的版本號,代表 npm 已經安裝完成。

npm / yarn / pnpm 的差異

在 JavaScript 的開發生態中,你會經常看到一個套件同時提供了 npm、yarn、pnpm 三種安裝方式,這三種套件管理工具有什麼差異呢?

簡單來說,這三種套件管理工具的功能都是一樣的,都是用來安裝、更新、移除套件,且都是存取 npm 官網的套件,但是在效能、安全性、穩定性等方面有所不同:

  • npm:Node.js 的官方套件管理工具,是最早出現的套件管理工具,但是在安裝套件時會將套件的依賴複製到專案的 node_modules 資料夾中,當專案中有多個套件使用相同的依賴時,會造成硬碟空間的浪費。

  • yarn:由 Facebook (Meta) 開發的套件管理工具,是 npm 的替代品,改善了 npm 的一些缺點,包含並行下載加快安裝速度,複雜專案的套件相依自動處理的穩定性更佳。

  • pnpm:是目前更主流廣泛使用的套件管理工具,與 npm、yarn 不同的是,pnpm 主打將套件的依賴放在全域的 node_modules 資料夾中,並且使用硬連結的方式來連結到專案的 node_modules 資料夾,專案數量增加時可以顯著節省硬碟空間,且可以避免套件的依賴重複安裝,也因此節省大量重新下載重複套件的時間。

功能比較

FeaturepnpmYarnnpm
Workspace support✔️✔️✔️
Isolated node_modules✔️ - The default✔️✔️
Hoisted node_modules✔️✔️✔️ - The default
Auto installing peers✔️✔️
Plug'n'Play✔️✔️ - The default
Zero-Installs✔️
Patching dependencies✔️✔️
Managing Node.js versions✔️
Has a lockfile✔️ - pnpm-lock.yaml✔️ - yarn.lock✔️ - package-lock.json
Overrides support✔️✔️ - Via resolutions✔️
Content-addressable storage✔️
Dynamic package execution✔️ - Via pnpm dlx✔️ - Via yarn dlx✔️ - Via npx
Side-effects cache✔️
Listing licenses✔️ - Via pnpm licenses list✔️ - Via a plugin

以上 3 個都是主流的 Node Package Manager,以現今環境來說,pnpm 是目前最推薦的套件管理工具。

如何安裝 pnpm

最簡單的方式,你可以透過 npm 來全域安裝 pnpm:

bash
npm install -g pnpm

這樣就完成了,你可以透過以下指令來確認 pnpm 是否已經安裝:

bash
pnpm -v

常用指令列表

作用npmyarnpnpm👍
安裝 package.json
的所有套件
npm installyarn installpnpm install
移除套件npm uninstall xxxyarn remove xxxpnpm remove xxx
移除套件的簡寫npm rm xxxyarn rm xxxpnpm rm xxx
全域安裝套件npm i xxx -gyarn global add xxxpnpm add -g xxx
安裝套件(開發跟生產階段都要用)npm i xxxyarn add xxxpnpm add xxx
安裝套件(僅開發階段使用)npm i xxx -Dyarn add -D xxxpnpm add -D xxx
更新套件npm updateyarn upgradepnpm update
全域更新套件npm update -gyarn global upgradepnpm update -g
執行 scriptnpm run xxxyarn run xxxpnpm run xxx
清除快取npm cache cleanyarn cache cleanpnpm store prune
動態執行套件npx xxxyarn dlx xxxpnpm dlx xxx
查看全域安裝的套件npm list -g --depth 0yarn global listpnpm list -g
更新 package manager 自身版本npm install -g npmyarn set version latestpnpm self-update

Released under the MIT License.