解决 Corepack 报错:Cannot find matching keyid

2026-06-03#pnpm

最近在搭建一个使用 Node.js 的 Pulumi 项目时,遇到了 Cannot find matching keyid 的错误,原因是 Corepack 的安全密钥已过期。

错误信息 🔗

pulumi install
Installing dependencies...

/home/xxx/.local/share/fnm/node-versions/v22.13.1/installation/lib/node_modules/corepack/dist/lib/corepack.cjs:21535
  if (key == null || signature == null) throw new Error(`Cannot find matching keyid: ${JSON.stringify({ signatures, keys })}`);
                                              ^

Error: Cannot find matching keyid: {"signatures":[{"sig":"MEQCIA4Pa4uh9IDxNn1FDlbUrTriLjYti+RvKXhyOyliqalNAiAonVnVrXFp7Tmm7Zj3e4QqgNuU5XkKCCr6f7GSvaNfsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"keys":[{"expires":null,"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","keytype":"ecdsa-sha2-nistp256","scheme":"ecdsa-sha2-nistp256","key":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1Olb3zMAFFxXKHiIkQO5cJ3Yhl5i6UPp+IhuteBJbuHcA5UogKo0EWtlWwW6KSaKoTNEYL7JlCQiVnkhBktUgg=="}]}
    at verifySignature (/home/xxx/.local/share/fnm/node-versions/v22.13.1/installation/lib/node_modules/corepack/dist/lib/corepack.cjs:21535:47)
    at fetchLatestStableVersion (/home/xxx/.local/share/fnm/node-versions/v22.13.1/installation/lib/node_modules/corepack/dist/lib/corepack.cjs:21553:5)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async fetchLatestStableVersion2 (/home/xxx/.local/share/fnm/node-versions/v22.13.1/installation/lib/node_modules/corepack/dist/lib/corepack.cjs:21672:14)
    at async Engine.getDefaultVersion (/home/xxx/.local/share/fnm/node-versions/v22.13.1/installation/lib/node_modules/corepack/dist/lib/corepack.cjs:22298:23)
    at async Engine.executePackageManagerRequest (/home/xxx/.local/share/fnm/node-versions/v22.13.1/installation/lib/node_modules/corepack/dist/lib/corepack.cjs:22396:47)
    at async Object.runMain (/home/xxx/.local/share/fnm/node-versions/v22.13.1/installation/lib/node_modules/corepack/dist/lib/corepack.cjs:23102:5)

Node.js v20.20.2
error: installing dependencies: exit status 1

原因和解决办法 🔗

该错误的原因是 Corepack 的安全密钥已经过期,无法验证新版 pnpm(如 v10.1.0+)的签名。这是因为 2025 年初 npm 仓库轮换了签名密钥,但 Corepack 内置的密钥没有同步更新。

重新启用 Corepack 即可更新密钥:

corepack enable

之后再次执行 pnpm install,Corepack 会重新下载 pnpm,询问时确认即可:

pnpm install

! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-9.15.0.tgz
? Do you want to continue? [Y/n] y