【Node】Corepack - 解决 pnpm 或 yarn 的多版本管理、解决本地版本与 packageManager 中的版本一致性问题
解决 pnpm
版本与 package.json
中 packageManager
中的版本不一致
package-manager-strict=false
Corepack
这是个实验性工具文档,请优先查看官方文档,以获得最新信息!
文档日期版本:
Node.js
=>v22.2.0
Corepack
=>v0.28.1
什么是 Corepack?
Corepack
是 Node.js
的一个实验性工具,可以管理 package managers
(包管理器)的版本,例如 npm
、yarn
、pnpm
。
Corepack
允许你在项目内指定所需的包管理器和版本,在使用时自动切换至指定版本。这样可以统一项目开发人员的包管理器和版本,减少因为包管理器版本不一致导致的各种问题。
使用 Corepack
$ which -a pnpm
# /usr/local/bin/pnpm
corepack enable [... name]
- 启用 Corepack
corepack enable
$ pnpm -v
# 9.1.3
$ yarn -v
# 1.22.22
启用后 corepack
会为 yarn
、pnpm
设置 shims(间接层),默认都为 latest(目前默认是 yarn 的 v1 版本),后续 corepack
靠此拦截。
corepack
默认没有为 npm
启用 shims,corepack
不会限制你使用 npm
的操作(例如 package.json
里的 packageManager
)。
How does Corepack interact with npm?
目前支持的包管理器
Package manager | Binary names |
---|---|
Yarn | yarn , yarnpkg |
pnpm | pnpm , pnpx |
corepack use <name[@<version>]>
- 在项目内指定包管理器
package.json
{
"name": "corepack-project",
"version": "0.0.0"
}
使用 corepack use
# 使用最新版本
$ corepack use pnpm
# or 使用 latest 8.x version
$ corepack use pnpm@8.x
# or
$ corepack use pnpm@8.9.0
直接使用包管理器安装
package.json
中未指定packageManager
项目中未指定包管理器和版本时,
corepack
将会使用当前执行命令的 “known good release” 版本,并在package.json
中生成packageManager
字段。pnpm -v # or ... pnpm install
执行结果:
package.json
{ "name": "corepack-project", "version": "0.0.0", "packageManager": "pnpm@9.1.3+sha512.7c2ea089e1a6af306409c4fc8c4f0897bdac32b772016196c469d9428f1fe2d5a21daf8ad6512762654ac645b5d9136bb210ec9a00afa8dbc4677843ba362ecd" }
package.json
中指定了packageManager
{ "name": "corepack-project", "version": "0.0.0", "packageManager": "pnpm@8.9.0" }
执行结果:
pnpm -v # 8.9.0
corepack install <-g,--global> [... name[@<version>]]
- 更换全局包管理器版本
corepack install --global pnpm@latest
# or
corepack install --global pnpm@8.9.0
其他方式
该命令未在官方文档中找到,但当前版本仍可使用。
corepack prepare `<`packageManager>@`<`version> --activate
# or
corepack prepare pnpm@latest --activate
corepack disable [... name]
- 禁用 Corepack 或禁用某个包管理器
禁用 corepack
corepack disable
禁用 pnpm
corepack disable pnpm
# result
pnpm -v
# command not found: pnpm
Node.js Corepack
Corepack
https://github.com/nodejs/corepack?tab=readme-ov-file#-corepack
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 kshao-blog-前端知识记录!
评论