Skip to content

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

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1