【Node】Corepack - 解决 pnpm 或 yarn 的多版本管理、解决本地版本与 packageManager 中的版本一致性问题
解决 pnpm 版本与 package.json 中 packageManager 中的版本不一致
package-manager-strict=false
Corepack
这是个实验性工具文档,请优先查看官方文档,以获得最新信息!
文档日期版本:
Node.js=>v22.2.0Corepack=>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-前端知识记录!
评论





