
我为什么使用 Corepack?

你知道如何在不同的项目中使用不同的 pnpm 版本吗?
什么是 Corepack?
Corepack 是 Node.js (v16.9.0+
) 自带的用来管理 包管理器 (如:yarn / pnpm) 版本的管理器。
使用它你可以在不同的项目甚至不同的目录中使用不同的包管理器,或不同的版本。
所以你也不再需要单独去安装不同的包管理器,通过 Corepack 可以更加方便的统一管理它们。
Corepack 的用法
Corepack 的用法非常简单,只需要使用 corepack enable
命令启用它即可。
但是要注意,你需要先卸载系统中以前安装过的其他包管理器,因为它们的命令存在于系统 bin
目录中,
通常优先级高于 Corepack 命令,如果不将其移除则 Corepack 可能无法生效。
我们可以通过 which -a
命令查找所有同名命令的路径,然后将其重命名或直接删除。
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 的则没有问题。
which -a pnpm
~/Library/Caches/fnm_multishells/6325_1705128448058/bin/pnpm~/Library/Caches/fnm_multishells/7447_1665198844214/bin/pnpm
然后验证它们的版本没有问题即可愉快的使用了!
yarn -vpnpm -v
使用指定的版本
最标准的方法就是在项目的 package.json
文件中配置 packageManager
字段,例如:
{ "packageManager": "pnpm@8.14.1"}
这将强制当前项目使用 pnpm
的 8.14.1
版本 (如果没有安装这个版本也会自动安装)
你可以随时修改 packageManager
来做到更新或降级版本
pnpm -v8.14.1
并且当你错误的使用了其他包管理器会直接报错阻止它。
Usage Error: This project is configured to use pnpm
$ yarn ...
如果你没有配置 packageManager
字段,则会使用全局的默认版本,
你可以在项目外使用 corepack prepare --activate
命令切换到指定版本,例如:
# 这会将全局默认 pnpm 更新到最新版corepack prepare pnpm@latest --activate
# 这会将全局默认 pnpm 切换到 7.33.6 版本corepack prepare pnpm@7.33.6 --activate
你还可以临时使用一个指定的版本,它不会更改全局默认的版本,只会在当次执行生效:
corepack pnpm@8 -v8.14.1
corepack pnpm@7 -v7.33.2