Node.js v18.20.8 文档


Corepack#>

稳定性: 1 - 实验性

Corepack 是一个用于帮助管理你的包管理器版本的实验性工具。它为每个 支持的包管理器 提供二进制代理,当调用时,会识别当前项目配置的包管理器,必要时自动安装,并最终运行它,而无需用户的显式操作。

Corepack is an experimental tool to help with managing versions of your package managers. It exposes binary proxies for each supported package manager that, when called, will identify whatever package manager is configured for the current project, transparently install it if needed, and finally run it without requiring explicit user interactions.】

此特性简化了两个核心工作流程:

【This feature simplifies two core workflows:】

  • 它简化了新贡献者的入职流程,因为他们不再需要仅仅为了使用你希望他们使用的包管理器而遵循特定系统的安装步骤。
  • 它允许你确保团队中的每个人都将使用你希望他们使用的确切包管理器版本,而无需他们在每次你需要进行更新时手动同步。

工作流程#>

【Workflows】

启用该功能#>

【Enabling the feature】

由于其实验性状态,目前需要显式启用 Corepack 才能生效。要做到这一点,请运行 corepack enable,这将会在你的环境中 node 二进制文件旁设置符号链接(如有必要,也会覆盖现有的符号链接)。

【Due to its experimental status, Corepack currently needs to be explicitly enabled to have any effect. To do that, run corepack enable, which will set up the symlinks in your environment next to the node binary (and overwrite the existing symlinks if necessary).】

从现在起,对 支持的二进制文件 的任何调用都将正常工作,无需进一步设置。如果你遇到问题,请运行 corepack disable 从系统中移除代理(并考虑在 Corepack 仓库 上提交问题以告知我们)。

【From this point forward, any call to the supported binaries will work without further setup. Should you experience a problem, run corepack disable to remove the proxies from your system (and consider opening an issue on the Corepack repository to let us know).】

配置包#>

【Configuring a package】

Corepack 代理将会在你当前的目录层级中找到最接近的 package.json 文件,以提取其 "packageManager" 属性。

【The Corepack proxies will find the closest package.json file in your current directory hierarchy to extract its "packageManager" property.】

如果该值对应 支持的包管理器,Corepack 将确保对相关二进制文件的所有调用都运行在所请求的版本上,如有需要会按需下载,并在无法成功获取时中止。

【If the value corresponds to a supported package manager, Corepack will make sure that all calls to the relevant binaries are run against the requested version, downloading it on demand if needed, and aborting if it cannot be successfully retrieved.】

升级全局版本#>

【Upgrading the global versions】

在现有项目之外运行时(例如运行 yarn init),Corepack 默认会使用预定义版本,这些版本大致对应每个工具的最新稳定版本。可以通过运行 corepack prepare 命令并指定你希望设置的包管理器版本来覆盖这些版本:

【When running outside of an existing project (for example when running yarn init), Corepack will by default use predefined versions roughly corresponding to the latest stable releases from each tool. Those versions can be overridden by running the corepack prepare command along with the package manager version you wish to set:】

corepack prepare yarn@x.y.z --activate 

或者,可以使用标签或范围:

【Alternately, a tag or range may be used:】

corepack prepare pnpm@latest --activate
corepack prepare yarn@stable --activate 

离线工作流程#>

【Offline workflow】

许多生产环境没有网络访问权限。由于 Corepack 通常直接从其注册表下载包管理器版本,这可能会与此类环境发生冲突。为了避免这种情况,请在仍然可以访问网络时(通常是在准备部署镜像时)运行 corepack prepare 命令。这将确保即使没有网络访问,也能使用所需的包管理器。

【Many production environments don't have network access. Since Corepack usually downloads the package manager releases straight from their registries, it can conflict with such environments. To avoid that happening, call the corepack prepare command while you still have network access (typically at the same time you're preparing your deploy image). This will ensure that the required package managers are available even without network access.】

prepare 命令具有 各种标志。有关更多信息,请查阅详细 Corepack 文档

【The prepare command has various flags. Consult the detailed Corepack documentation for more information.】

支持的包管理器#>

【Supported package managers】

以下二进制文件通过 Corepack 提供:

【The following binaries are provided through Corepack:】

包管理器二进制名称
Yarnyarn, yarnpkg
pnpmpnpm, pnpx

常见问题#>

【Common questions】

Corepack 如何与 npm 交互?#>

【How does Corepack interact with npm?】

虽然 Corepack 可以像其他包管理器一样支持 npm,但它的 shim 默认情况下并未启用。这会带来一些后果:

【While Corepack could support npm like any other package manager, its shims aren't enabled by default. This has a few consequences:】

  • 在一个配置为使用其他包管理器的项目中运行 npm 命令始终是可能的,因为 Corepack 无法拦截它。
  • 虽然 npm"packageManager" 属性中的一个有效选项,但缺少 shim 会导致使用全局 npm。

运行 npm install -g yarn 无效#>

【Running npm install -g yarn doesn't work】

npm 在进行全局安装时会防止意外覆盖 Corepack 二进制文件。为避免此问题,可以考虑以下几种方法:

【npm prevents accidentally overriding the Corepack binaries when doing a global install. To avoid this problem, consider one of the following options:】

  • 不要运行这个命令;Corepack 无论如何都会提供包管理器的二进制文件,并确保所请求的版本始终可用,因此无需显式安装包管理器。
  • npm install 中添加 --force 标志;这会告诉 npm 可以覆盖二进制文件,但在此过程中你会删除 Corepack 的二进制文件。(运行 corepack enable 可将它们添加回来。)
Node.js 中文网 - 粤ICP备13048890号