What is?
Corepack:https://github.com/nodejs/corepack
Corepack is a zero-runtime-dependency Node.js script that acts as a bridge between Node.js projects and the package managers they are intended to be used with during development. In practical terms, Corepack lets you use Yarn, npm, and pnpm without having to install them.
Corepack 是一个零运行时依赖性的 Node.js 脚本,可充当 Node.js 项目与开发期间要使用的包管理器之间的桥梁。实际上,Corepack 可让您使用 Yarn、npm 和 pnpm,而无需安装它们。
说人话就是:Corepack 是一个用于管理和切换包管理工具的工具,它是 Node.js 的一部分。具体来说,Corepack 允许你在项目中使用不同的包管理器(比如 npm、Yarn、pnpm 等),并在不同的开发环境中统一管理这些工具的版本。
Why do you need Corepack?
随着 Node.js 项目越来越多使用不同的包管理工具(比如 Yarn 和 pnpm),每个开发者或 CI 环境可能需要使用不同版本的包管理工具。Corepack 通过提供一个简单的接口来避免这种版本不匹配的问题。
工作原理
自动切换工具版本:Corepack 会根据你项目中的配置文件(比如
package.json或.npmrc)来决定使用哪个包管理工具,以及使用哪个版本。包管理器的版本锁定:Corepack 可以确保你和你的团队、CI 环境都在使用相同版本的包管理工具,避免了因为工具版本不同而导致的问题。
安装和运行包管理器:Corepack 会自动为你安装合适版本的包管理工具,并将其运行。
使用方式
确保你的 Node.js 版本支持 Corepack(Node.js 16.9 或更高版本)。
通过命令
corepack enable启用 Corepack。指定你想使用的包管理器版本(package.json 中 packageManager 配置),
就这么简单,没有 4。
Corepack 会根据这个版本来自动管理工具。
示例
假设你项目里用了 pnpm 作为包管理器,且希望确保每个人都使用相同版本的 pnpm。你只需在项目 package.json 中配置:

此时,你可以直接 pnpm i:

会提示你是否自动安装 pnpm 对应的版本。
请注意:
如果此时你挂着🪜(并开了全局或者终端代理脚本),可以直接 Y。这会直接下载安装成功
如果你的🪜网络不好,或者没有🪜,则需要先将环境变量配置为(可以加到 .zshrc、fish config 或者 profile 里,这是指定 corepack 去腾讯源 download 包管理器):
export COREPACK_NPM_REGISTRY=https://mirrors.tencent.com/npm/
然后按 Y,就正常在执行 install 了。
Q & A
Q: 一直拉不下来 pnpm/yarn 等包怎么办?
A: corepack 默认会去 npmjs.org 下载安装包管理器。如果你的🪜网络不好,或者没有🪜,则需要先将环境变量配置为:
export COREPACK_NPM_REGISTRY=https://mirrors.tencent.com/npm/可以加到 .zshrc、fish config 或者 profile 里,这是指定 corepack 去腾讯源 download 包管理器的意思。
Q: 在 CI 里怎么办?没办法手动 Y 确认。
A: 如检测到是在 CI 里(依赖容器里的 CI=1 环境变量)默认不进行提示直接使用 packageManager 的版本。注意提前配置好
COREPACK_NPM_REGISTRY环境变量。
再有疑问记到此处,并且直接 cue @尚志雨 或者 @刘振泽