corepack
目录
参考资料:
Corepack 可以用来在项目中代理使用 npm、pnpm、yarn 等包管理器。主要解决了如下痛点:
- 不同项目之间用的包管理器不相同,来回切换包管理器麻烦(不同种类以及不同版本的包管理器)
- 同一个项目,不同的开发者用的包管理器不同,导致“在我这运行良好”的问题
使用和禁用
从 Node.js v16.9.0 开始,Corepack 是 Node.js 的内置特性,不过目前还是实验性的功能,需要手动解锁/禁用。
bash
# 启用
corepack enable
# 禁用
corepack disable
行为
corepack 的功能对应着 package.json 中的 packageManager
字段,该字段决定当前项目需要使用的包管理器以及版本,例如:
json
{
"name": "my-project",
"version": "1.0.0",
"packageManager": "yarn@1.22.10"
}
更多内容可见"packageManager"
用户使用包管理器时,会自动选择合适版本(从设置的源下载)的包管理器执行
当用户使用的包管理工具和项目中的 packageManager
字段不一致时,Corepack 报错并提示合适的包管理工具
若没有指定 packageManager
字段,则会根据用户调用的包管理器,设置 packageManager
字段。
在没有指定
packageManager
字段的项目中用 corepack,会自动在 package.json 中设置packageManager
字段,这可能导致一些协作上的问题,设置export COREPACK_ENABLE_AUTO_PIN=0
来避免更多环境变量设置详见:Corepack - Environment Variables | Github
当然,你也可以使用命令指定包管理器
bash
corepack use pnpm@7.x
corepack use yarn@*
设置全局包管理器
bash
# corepack install --global yarn@x.y.z
# 支持标签或范围管理版本
corepack install --global pnpm@*
corepack install --global yarn@stable