2026-05-21

corepack upgrade pnpm

你想要更新 Corepack 內建的 pnpm 版本,但又不想用 corepack use pnpm@latest(因為它會在 package.json 裡面加上 packageManager 欄位)。這個需求可以透過直接更新 Corepack 的「shim」來達成,而不影響你的專案設定。

方法一:直接安裝新版 pnpm

npm install -g pnpm@latest

這樣會在全域安裝最新的 pnpm,Corepack 也會自動偵測到新版,不需要透過 corepack use


方法二:更新 Corepack 的 pnpm shim

Corepack 其實有自己的管理方式,你可以用以下指令更新它的 pnpm 版本,而不會寫入 package.json

corepack prepare pnpm@latest --activate
  • prepare 會下載並安裝指定版本的 pnpm。
  • --activate 會更新 Corepack 的 shim 指向這個版本。
  • 不會修改專案的 package.json

方法三:指定版本而非 latest

如果你想要固定某個版本(避免 latest 帶來不一致),可以直接指定:

corepack prepare pnpm@9.1.0 --activate

✅ 總結:

  • 不要用 corepack use,因為它會修改 package.json
  • corepack prepare ... --activate直接全域安裝 pnpm,就能更新 Corepack 的 pnpm 版本而不影響專案設定。

要不要我幫你整理一個 對比表,清楚列出 corepack usecorepack preparenpm install -g pnpm 三種方式的差異?

你想要更新 Corepack 內建的 pnpm 版本,但又不想用 corepack use pnpm@latest(因為它會在 package.json 裡面加上 packageManager 欄位)。這個需求可以透過直接更新 Corepack 的「shim」來達成,而不影響你的專案設定。

方法一:直接安裝新版 pnpm

npm install -g pnpm@latest

這樣會在全域安裝最新的 pnpm,Corepack 也會自動偵測到新版,不需要透過 corepack use


方法二:更新 Corepack 的 pnpm shim

Corepack 其實有自己的管理方式,你可以用以下指令更新它的 pnpm 版本,而不會寫入 package.json

corepack prepare pnpm@latest --activate
  • prepare 會下載並安裝指定版本的 pnpm。
  • --activate 會更新 Corepack 的 shim 指向這個版本。
  • 不會修改專案的 package.json

方法三:指定版本而非 latest

如果你想要固定某個版本(避免 latest 帶來不一致),可以直接指定:

corepack prepare pnpm@9.1.0 --activate

✅ 總結:

  • 不要用 corepack use,因為它會修改 package.json
  • corepack prepare ... --activate直接全域安裝 pnpm,就能更新 Corepack 的 pnpm 版本而不影響專案設定。

這裡幫你整理一個 對比表,清楚比較三種方式更新 Corepack 的 pnpm 版本:

方法 指令範例 是否修改 package.json 更新範圍 適合情境
corepack use pnpm@latest corepack use pnpm@latest ✅ 會加上 packageManager 欄位 專案層級 (影響當前專案) 適合想要專案明確指定 pnpm 版本的人
corepack prepare pnpm@latest --activate corepack prepare pnpm@latest --activate ❌ 不會修改 package.json Corepack shim (全域) 適合只想更新 Corepack 內建 pnpm,不影響專案設定
npm install -g pnpm@latest npm install -g pnpm@latest ❌ 不會修改 package.json 全域安裝 (繞過 Corepack) 適合不想用 Corepack,直接用全域 pnpm

🔑 重點建議

  • 如果你只是要更新 Corepack 的 pnpm 版本,但不想污染 package.json → 用 corepack prepare ... --activate
  • 如果你完全不想透過 Corepack → 用 全域安裝

沒有留言:

張貼留言