u3u u3u's Blog
我为什么使用 Corepack?

我为什么使用 Corepack?

u3u u3u

你知道如何在不同的项目中使用不同的 pnpm 版本吗?

什么是 Corepack?

Corepack 是 Node.js (v16.9.0+) 自带的用来管理 包管理器 (如:yarn / pnpm) 版本的管理器。 使用它你可以在不同的项目甚至不同的目录中使用不同的包管理器,或不同的版本。 所以你也不再需要单独去安装不同的包管理器,通过 Corepack 可以更加方便的统一管理它们。

Corepack 的用法

Corepack 的用法非常简单,只需要使用 corepack enable 命令启用它即可。 但是要注意,你需要先卸载系统中以前安装过的其他包管理器,因为它们的命令存在于系统 bin 目录中, 通常优先级高于 Corepack 命令,如果不将其移除则 Corepack 可能无法生效。 我们可以通过 which -a 命令查找所有同名命令的路径,然后将其重命名或直接删除。

Terminal window
which -a yarn
~/Library/Caches/fnm_multishells/6325_1705128448058/bin/yarn
/opt/homebrew/bin/yarn
~/Library/Caches/fnm_multishells/7447_1665198844214/bin/yarn

只要确保 which -a 返回的第一条路径 (首选) 是 Corepack 的则没有问题。

Terminal window
which -a pnpm
~/Library/Caches/fnm_multishells/6325_1705128448058/bin/pnpm
~/Library/Caches/fnm_multishells/7447_1665198844214/bin/pnpm

然后验证它们的版本没有问题即可愉快的使用了!

Terminal window
yarn -v
pnpm -v

使用指定的版本

最标准的方法就是在项目的 package.json 文件中配置 packageManager 字段,例如:

package.json
{
"packageManager": "pnpm@8.14.1"
}

这将强制当前项目使用 pnpm8.14.1 版本 (如果没有安装这个版本也会自动安装)
你可以随时修改 packageManager 来做到更新或降级版本

Terminal window
pnpm -v
8.14.1

并且当你错误的使用了其他包管理器会直接报错阻止它。

Terminal window
Usage Error: This project is configured to use pnpm
$ yarn ...

如果你没有配置 packageManager 字段,则会使用全局的默认版本, 你可以在项目外使用 corepack prepare --activate 命令切换到指定版本,例如:

Terminal window
# 这会将全局默认 pnpm 更新到最新版
corepack prepare pnpm@latest --activate
# 这会将全局默认 pnpm 切换到 7.33.6 版本
corepack prepare pnpm@7.33.6 --activate

你还可以临时使用一个指定的版本,它不会更改全局默认的版本,只会在当次执行生效:

Terminal window
corepack pnpm@8 -v
8.14.1
corepack pnpm@7 -v
7.33.2