Skip to content

管理包管理工具的工具

corepack 从 node14、node16 的最后两个版本内提供,是一个管控设置包管理器的默认官方工具。

目前仅管控 pnpm 和 yarn。

切换 node 版本后要及时开启 corepack

要及时地在全局运行以下命令:

bash
corepack enable

开启 corepack 后会提供全局命令,具体效果见以下 gif 示意图。

以 node20.15.0 为例

corepack-enable-with-node-20.15.0

以 node22.4.1 为例

corepack-enable-with-node-22.4.1

这个故障和目前正在使用的 node 版本切换工具 nvmd(nvm-desktop)无关。单纯的 corepack 问题。

安装失败

比如这段全局安装的命令:

bash
corepack install pnpm@9.15.0 -g

报错如下:

详情
txt
PS E:\code\rzn\tests\2024-12-29\001> corepack install pnpm@9.15.0 -g
Installing pnpm@9.15.0...
Internal Error: Error when performing the request to https://registry.npmjs.org/pnpm/-/pnpm-9.15.0.tgz; for troubleshooting help, see https://github.com/nodejs/corepack#troubleshooting  
    at fetch (E:\store\nvm-desktop\20.18.0\node_modules\corepack\dist\lib\corepack.cjs:21609:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async fetchUrlStream (E:\store\nvm-desktop\20.18.0\node_modules\corepack\dist\lib\corepack.cjs:21639:20)
    at async download (E:\store\nvm-desktop\20.18.0\node_modules\corepack\dist\lib\corepack.cjs:21762:18)
    at async installVersion (E:\store\nvm-desktop\20.18.0\node_modules\corepack\dist\lib\corepack.cjs:21854:55)
    at async Engine.ensurePackageManager (E:\store\nvm-desktop\20.18.0\node_modules\corepack\dist\lib\corepack.cjs:22310:32)
    at async InstallGlobalCommand.installFromDescriptor (E:\store\nvm-desktop\20.18.0\node_modules\corepack\dist\lib\corepack.cjs:22707:5)
    at async Promise.all (index 0)
    at async InstallGlobalCommand.execute (E:\store\nvm-desktop\20.18.0\node_modules\corepack\dist\lib\corepack.cjs:22685:5)
    at async InstallGlobalCommand.validateAndExecute (E:\store\nvm-desktop\20.18.0\node_modules\corepack\dist\lib\corepack.cjs:19835:22)

截图如下:

详情

2024-12-29-18-04-11

问题定性

这属于典型的网络代理问题。由于我为了解决其他工具的网络问题,配置了很多环境变量,因此本问题我更加倾向于全局设置镜像源。设置 corepack 的镜像源为淘宝源,而不是官方镜像源。

解决过程

先去其他的目录内,运行命令 pnpm v pnpm@9.15.0 ,以便查询相关信息。相关信息如下:

详情
txt
PS E:\code\rzn\github-desktop-store\RPGMV-dev-notes> pnpm v pnpm@9.15.0

pnpm@9.15.0 | MIT | deps: none | versions: 1096
Fast, disk space efficient package manager
https://pnpm.io

keywords: pnpm9, dependency manager, install, installer, uninstall, remove, link, prune, shrinkwrap, lockfile, fast, 
rapid, efficient, package.json, packages, dependencies, symlinks, hardlinks, modules, npm, package manager, monorepo, multi-package, workspace:*

bin: pnpm, pnpx

dist
.tarball: https://registry.npmmirror.com/pnpm/-/pnpm-9.15.0.tgz
.shasum: 8bfdb6d72b4d5fdf87d21d27f2bfbe2b21dd2629
.integrity: sha512-duI3l2CkMo7EQVgVvNZije5yevN3mqpMkU45RBVsQpmSGon5djge4QfUHxLPpLZmgcqccY8GaPoIMe1MbYulbA==
.unpackedSize: 17.5 MB

maintainers:
- zkochan <z@kochan.io>
- pnpmuser <publish-bot@pnpm.io>

dist-tags:
dev: 6.23.7-202112041634  latest-5: 5.18.10         latest: 9.15.2            next-9: 9.15.2
latest-1: 1.43.1          latest-6: 6.35.1          next-10: 10.0.0-rc.2      pr4475: 0.0.0-pr4475.1
latest-2: 2.25.7          latest-7: 7.33.5          next-6: 6.35.1
latest-3: 3.8.1           latest-8: 8.15.9          next-7: 7.33.7
latest-4: 4.14.4          latest-9: 9.15.2          next-8: 8.15.9

published 3 weeks ago by pnpmuser <publish-bot@pnpm.io>

目前 pnpm 是在淘宝镜像下查询的,注意到关键信息 tarball ,在淘宝源的有效 url 为

可以考虑让 corepack 更改镜像源为淘宝源,下载该 tarball 即可完成安装。

阅读文档

官方文档明确说明了可以配置 COREPACK_NPM_REGISTRY 环境变量。

全局配置

在本机全局的 .npmrc 内设置镜像源。

bash
# 设置全局 corepack 的镜像源,处理corepack安装pnpm失败的故障
# https://github.com/nodejs/corepack#environment-variables
# https://github.com/nodejs/corepack/issues/67
# https://github.com/nodejs/corepack/issues/572
COREPACK_NPM_REGISTRY=https://registry.npmmirror.com/

至此已解决问题。

安装与升级 pnpm

安装失败的问题由来已久。升级和安装都经常遇到诡异的问题。

  1. corepack 的 key 值校验问题,在今年 1 月 27 号的时候就有相关 issue 了。

  2. 当天 1 月 27 号,corepack0.31.0 已经解决这个问题。

  3. 现在的 node 版本没有提供合适的 corepack 版本,如下:

corepack 版本过低

2025-02-27-22-26-08

  1. node20 版本下,要使用 corepack0.31.0,还要等到今年 3 月 13 号

目前按照以下方案来安装 pnpm:

准备全局的 npmrc 配置

全局 .npmrc 配置
bash
# 设置全局 corepack 的镜像源,处理corepack安装pnpm失败的故障
# https://github.com/nodejs/corepack#environment-variables
# https://github.com/nodejs/corepack/issues/67
# https://github.com/nodejs/corepack/issues/572
COREPACK_NPM_REGISTRY=https://registry.npmmirror.com/

# 让corepack不检查包管理器key值的完整性
# https://github.com/pnpm/pnpm/issues/9029#issuecomment-2629817478
COREPACK_INTEGRITY_KEYS=0

具体的项目内依次运行以下命令

运行以下命令:

bash
corepack enable
# 这里的pnpm包版本号根据项目具体情况填写
corepack prepare pnpm@9.15.0 --activate

测试在 corepack0.31.0 内安装最新版的 pnpm

实测以下命令是正常可用的;

详情

2025-02-27-22-56-01

贡献者

The avatar of contributor named as ruan-cat ruan-cat

页面历史