`corepack` 安装pnpm

macOS 上,已经有 nvm + Node.js + yarn 的情况下,安装 pnpm :


✅ 最推荐:用 Corepack(官方方式,和 nvm 不冲突)

Node 16.9+ / 18+ 默认内置 Corepack

nvm 管理的 Node 也支持

1️⃣ 确认 Node 版本

bash 复制代码
node -v

如果 ≥ 16.9(你大概率是 18 / 20),直接继续。


2️⃣ 启用 Corepack

bash 复制代码
corepack enable

这一步只需执行一次


3️⃣ 激活 pnpm(推荐指定版本)

bash 复制代码
corepack prepare pnpm@latest --activate

或者:

bash 复制代码
corepack prepare pnpm@9 --activate

4️⃣ 验证

bash 复制代码
pnpm -v

🎯 优点

  • 不污染全局 npm
  • 跟 nvm / Node 版本切换完全兼容
  • 官方推荐方案(未来最稳)

🟡 备选方案:用 npm 全局安装(不推荐但可用)

如果你不想用 Corepack:

bash 复制代码
npm install -g pnpm

⚠️ 缺点:

  • 切 Node 版本后可能要重装
  • 不如 Corepack 干净

❌ 不建议:brew 安装 pnpm

bash 复制代码
brew install pnpm

不推荐原因

  • 和 nvm 管理的 node 路径容易冲突
  • 多 Node 版本时容易踩坑

🧪 验证 pnpm 是否和 yarn / nvm 共存正常

bash 复制代码
which pnpm
which yarn
which node

理想情况:

  • node → nvm 目录
  • pnpm → corepack shim
  • yarn → corepack / 原路径

📦 使用 pnpm 的基础命令速查

bash 复制代码
pnpm install        # 安装依赖
pnpm add react      # 添加依赖
pnpm add -D vite    # 开发依赖
pnpm dev            # 启动项目
pnpm dlx create-astro

🧠 常见问题(你这种环境很常见)

Q1:pnpm 会影响 yarn 吗?

👉 不会

  • pnpm / yarn 可在不同项目并存
  • packageManager 字段决定
json 复制代码
{
  "packageManager": "pnpm@9.0.0"
}

Q2:nvm 切 Node 版本后 pnpm 还在吗?

👉 用 Corepack 就一直在

如果切了老 Node:

bash 复制代码
corepack enable

Q3:我已经有 yarn classic / berry?

👉 也没问题,Corepack 同时支持:

  • yarn
  • pnpm

安装过程如遇到如下问题:

bash 复制代码
corepack prepare pnpm@9 --activate Preparing pnpm@9 for immediate activation... Internal Error: Cannot find matching keyid: {"signatures":。。。。

这个报错 不是你操作问题 ,而是一个 Corepack + pnpm 的已知签名校验问题 ,在 Node 20.x(尤其是你这个 20.13.1)+ 旧 Corepack key 缓存 的组合下非常常见。

我先用一句话解释,再给你 100% 可用的解决方案(按推荐顺序)


一句话结论(你现在遇到的是什么)

Corepack 在校验 pnpm 的签名时,发现"签名用的 keyid 和本地信任的 key 对不上"

👉 导致 Cannot find matching keyid

这是 Corepack 自己的 keyring 过期 / 不同步 问题,不是 pnpm 有问题,也不是你网络问题。


✅ 方案一(最推荐 & 最干净):升级 Corepack 自身

你现在用的是 Node 自带的 corepack,版本偏旧。

1️⃣ 先确认

bash 复制代码
corepack --version

2️⃣ 用 npm 升级 corepack(官方推荐修复方式)

bash 复制代码
npm install -g corepack@latest

⚠️ 这一步 不会影响 nvm / node,只是升级 corepack CLI。


3️⃣ 重新启用 + 激活 pnpm

bash 复制代码
corepack enable
corepack prepare pnpm@9 --activate

4️⃣ 验证

bash 复制代码
pnpm -v

👉 90% 的人到这里就好了


✅ 方案二(非常稳):跳过 prepare,直接用 corepack install

有些 Corepack 版本在 prepare 上有 bug,但 install 正常。

bash 复制代码
corepack enable
corepack install -g pnpm@9

然后:

bash 复制代码
pnpm -v

✅ 方案三(应急 / 临时):用 npm 装 pnpm(你可以之后再切回)

如果你现在急着用 pnpm(比如 Astro / demo):

bash 复制代码
npm install -g pnpm@9

✔ 能立刻用

❌ 不是最优雅,但完全安全

后面你修好 corepack 再换回即可。


❌ 不推荐但解释一下:为什么会这样

你看到的错误关键信息是:

复制代码
Cannot find matching keyid

本质原因:

  • pnpm 发布包 更新了签名 key
  • 你当前 corepack 内置的 key 列表 还停留在旧版本
  • Corepack 是"强校验派",直接拒绝

这在:

  • Node 20.x
  • macOS
  • nvm 用户
    特别常见

🧪 修好后,推荐你检查一次环境

bash 复制代码
which node
which corepack
which pnpm

理想情况:

  • node → ~/.nvm/...
  • corepack → 同一个 node 目录
  • pnpm → corepack shim
相关推荐
萌萌哒草头将军2 小时前
pnpm + monorepo 才是 AI 协同开发的最佳方案!🚀🚀🚀
前端·react.js·ai编程
hboot3 小时前
💪别再迷茫!一份让你彻底掌控 TypeScript 类型系统的终极指南
前端·typescript
GISer_Jing3 小时前
深入拆解Taro框架多端适配原理
前端·javascript·taro
毕设源码-邱学长3 小时前
【开题答辩全过程】以 基于VUE的藏品管理系统的设计与实现为例,包含答辩的问题和答案
前端·javascript·vue.js
用户28907942162714 小时前
Spec-Kit应用指南
前端
酸菜土狗4 小时前
🔥 手写 Vue 自定义指令:实现内容区拖拽调整大小(超实用)
前端
ohyeah4 小时前
深入理解 React Hooks:useState 与 useEffect 的核心原理与最佳实践
前端·react.js
Cache技术分享4 小时前
275. Java Stream API - flatMap 操作:展开一对多的关系,拉平你的流!
前端·后端
apollo_qwe5 小时前
前端缓存深度解析:从基础到进阶的实现方式与实践指南
前端