跳到主要內容
← 回到學習

學習 · 開發工具

Npm 與 Yarn

目錄 · 7 個段落
  1. 01三者對比
  2. 02為什麼 pnpm 省空間
  3. 03各管理器的速度對比
  4. 04安裝 / 切換
  5. 05何時用哪個
  6. 06遷移到 pnpm 的步驟
  7. 07常見地雷

npm vs Yarn vs pnpm

TL;DR
npm(預設,Node 內建)、Yarn(Facebook 出,Yarn 1 已 deprecated,Yarn Berry 重大改動)、pnpm(2026 主流,符號連結省空間 + 速度快)、Bun(全新運行時,內建 package manager)。2026 年新專案推薦 pnpm 或 Bun。

三者對比

項目npmYarn (Classic)pnpmBun
速度普通快快超快
磁碟空間大(每專案複製)大超省(symlink)中
Lockfilepackage-lock.jsonyarn.lockpnpm-lock.yamlbun.lockb
Workspace✅(7.0+)✅✅ 強✅
維護✅ Node 內建維護中(Berry)✅ 活躍✅ 新興
推薦?OK漸退⭐ 推薦嘗鮮

為什麼 pnpm 省空間

npm / Yarn 的 node_modules:

project-A/node_modules/react      ← 完整副本
project-B/node_modules/react      ← 又一份
project-C/node_modules/react      ← 再一份

pnpm 的 node_modules:

~/.pnpm-store/react@18.2.0        ← 全機唯一一份
project-A/node_modules/react      ← symlink 過去
project-B/node_modules/react      ← symlink 過去
project-C/node_modules/react      ← symlink 過去

10 個專案差距 GB 級,跨專案 install 也快,因為已下載過直接 link。


各管理器的速度對比

操作npmYarnpnpmBun
Cold install(無 cache)慢快更快超快
Warm install(有 cache)普通快超快超快
Update普通快快超快

Bun 的 install 速度比 npm 快 5-10 倍,因為它用 Rust + 並行 + 原生 binary。


安裝 / 切換

# pnpm
npm install -g pnpm
pnpm install
pnpm add react
pnpm dev
 
# Bun
curl -fsSL https://bun.sh/install | bash
bun install
bun add react
bun dev
 
# Yarn(Classic / Berry)
npm install -g yarn      # Classic 1.x(maintenance mode)
yarn set version berry   # 升級到 2/3/4(Yarn Berry)
bash

何時用哪個

2026 年建議
  • 新專案 / 可改變 → pnpm(普及度高、生態完整、無痛遷移)
  • 想嘗鮮 / 全 stack 都用 Bun → Bun(速度快、整合測試 / 打包)
  • 遺留專案 / 公司規範 → 跟現狀走
  • Yarn Classic 專案 → 考慮升 Yarn Berry 或遷移 pnpm
  • 單純不想想 → npm

遷移到 pnpm 的步驟

# 1. 移除 node_modules + lockfile
rm -rf node_modules package-lock.json
 
# 2. 用 pnpm install
pnpm install
 
# 3. 把 npm scripts 替換
# package.json 中所有 "npm install" / "yarn add" 改成 "pnpm add"
bash

大部分專案無痛遷移。少數套件假設 node_modules 是平鋪結構( "node_modules hoisting" 假設)會出問題,可以用 .npmrc 設定 shamefully-hoist=true 兜底。


常見地雷

1. 多管理器混用
同一專案同時有 package-lock.json 跟 yarn.lock 是地雷。lockfile 會打架,不同人 install 出不同版本。

規定團隊只用一種,把另一個 lockfile 加進 .gitignore 並刪掉。

2. 全域裝 pnpm 後 npm 也會變慢
不會,pnpm 不會影響 npm 行為。但有些 hook(如 husky)會自動偵測管理器,要注意。
3. CI/CD 配置
# GitHub Actions
- uses: pnpm/action-setup@v3
  with: { version: 9 }
- run: pnpm install --frozen-lockfile
yaml

別忘記加 --frozen-lockfile(等同 npm 的 npm ci),確保 lockfile 不被改動。

目錄