在 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 shimyarn→ 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