Corepack 是一个零运行时依赖的 Node.js 脚本,充当 Node.js 项目和开发过程中要使用的包管理器之间的桥梁。实际上, Corepack 允许您使用 Yarn、npm 和 pnpm,而无需安装它们。
Corepack 默认随所有最新 Node.js 版本一起分发。运行corepack enable
以在您的路径上安装所需的 Yarn 和 pnpm 二进制文件。
首先卸载全局 Yarn 和 pnpm 二进制文件(只保留 npm)。一般来说,您可以通过运行以下命令来完成此操作:
npm uninstall -g yarn pnpm# 这应该足够了,但是如果你在没有通过 npm 的情况下安装了 Yarn,它可能#会更乏味 - 例如,你可能还需要运行 `brew uninstall yarn`。
然后安装Corepack:
npm install -g 核心包
我们确实承认使用 npm 安装 Corepack 的讽刺性和开销,这至少是首选选项是使用与 Node.js 本身一起分发的 Corepack 版本的部分原因。
请参阅CONTRIBUTING.md
。
只需像平常一样使用包管理器即可。在 Yarn 项目中运行yarn install
,在 pnpm 项目中pnpm install
,在 npm 项目中npm
。 Corepack 将捕获这些调用,并根据情况:
如果本地项目配置为您正在使用的包管理器,Corepack 将下载并缓存最新的兼容版本。
如果本地项目配置为不同的包管理器,Corepack 将要求您使用正确的包管理器再次运行该命令 - 从而避免安装工件的损坏。
如果本地项目没有为任何包管理器配置,Corepack 将假定您知道自己在做什么,并将使用已固定为“已知良好版本”的任何包管理器版本。检查相关部分以了解更多详细信息。
使用package.json
中的packageManager
字段设置包的管理器:
{“packageManager”:“[email protected]+sha224.953c8233f7a92884eee2de69a1b92d1f2ec1655e66d08071ba9a02fa”}
这里, yarn
是包管理器的名称,在版本3.2.3
中指定,以及该版本的 SHA-224 哈希值以进行验证。 packageManager@xyz
是必需的。哈希值是可选的,但强烈建议将其作为安全措施。包管理器允许的值为yarn
、 npm
和pnpm
。
您还可以提供.js
文件(将被解释为 CommonJS 模块)或.tgz
文件(将被解释为包, package.json
的"bin"
字段将用于确定要在存档中使用哪个文件)。
{“packageManager”:“yarn@https://registry.npmjs.org/@yarnpkg/cli-dist/-/cli-dist-3.2.3.tgz#sha224.16a0797d1710d1fb7ec40ab5c3801b68370a612a9b66ba117ad9924b”}
当在未列出受支持的包管理器的项目中运行 Corepack 时,它将默认使用一组已知的良好版本。
如果所请求的包管理器没有已知的良好版本,Corepack 会在 npm 注册表中查找最新的可用版本并将其缓存以供将来使用。
可以使用corepack install -g
在系统范围内更新已知的良好版本。当 Corepack 在与已知良好版本相同的主线上下载给定包管理器的新版本时,它会默认自动更新它。
该实用程序命令将在下一节中详细介绍。
您可以在构建容器映像时使用网络,在这种情况下,您只需运行corepack pack
以确保您的映像包含指定包管理器的“最后一次正确”版本。
或者您要将项目发布到网络不可用的系统,在这种情况下,您将先从本地计算机(使用corepack pack -o
)生成包管理器存档,然后将其存储在容器能够访问的位置(例如在您的存储库中)。之后,只需运行corepack install -g --cache-only
即可设置缓存。
corepack [@] [... args]
此元命令运行本地文件夹中指定的包管理器。您可以使用它来强制安装以给定版本运行,这在寻找回归时非常有用。
请注意,这些命令仍然检查是否为给定的包管理器配置了本地项目(即,您将无法在packageManager
字段引用pnpm
项目上运行corepack yarn install
)。
corepack cache clean
清除本地COREPACK_HOME
缓存目录。
corepack cache clear
清除本地COREPACK_HOME
缓存目录。
corepack enable [... name]
选项 | 描述 |
---|---|
--install-directory | 将垫片添加到指定位置 |
此命令将检测 Corepack 的安装位置,并在其旁边为每个指定的包管理器(如果不带参数调用该命令,则为所有包管理器)创建垫片。请注意,除非明确请求,否则不会安装 npm 垫片,因为 npm 目前通过其他方式与 Node.js 一起分发。
如果corepack
二进制文件所在的文件系统是只读的,则此命令将失败。解决方法是将二进制文件添加为 shell 配置文件中的别名(例如在~/.bash_aliases
中):
别名纱线=“corepack纱线”别名yarnpkg=“核心包yarnpkg”别名pnpm=“核心包pnpm”别名pnpx=“核心包pnpx”别名npm=“核心包npm”别名npx=“核心包npx”
在 Windows PowerShell 上,您可以使用$PROFILE
自动变量添加函数:
echo "功能纱线{ corepack纱线`$args}" >> $PROFILEecho "功能yarnpkg { corepack纱线pkg`$args}" >> $PROFILEecho "功能pnpm { corepack pnpm `$args }" >> $PROFILEecho "功能pnpx { corepack pnpx `$args }" >> $PROFILEecho "函数 npm { corepack npm `$args }" >> $PROFILEecho "函数 npx { corepack npx `$args }" >> $PROFILE
corepack disable [... name]
选项 | 描述 |
---|---|
--install-directory | 将垫片移至指定位置 |
此命令将检测 Node.js 的安装位置并从那里删除垫片。
corepack install
下载并安装本地项目中配置的包管理器。此命令不会更改从项目外部运行包管理器时使用的全局版本(如果您希望这样做,请使用“-g,--global”标志)。
corepack install <-g,--global> [... name[@]]
安装选定的包管理器并将其安装在系统上。
在定义packageManager
字段的项目之外调用各自的二进制文件时,如此安装的包管理器将被配置为新的默认值。
corepack pack [... name[@]]
选项 | 描述 |
---|---|
--json | 打印输出文件夹而不是日志 |
-o,--output | 生成存档的路径 |
下载选定的包管理器并将它们存储在适合与corepack install -g
一起使用的 tarball 中。
corepack use ]>
运行时,此命令将检索与提供的描述符匹配的最新版本,将其分配给项目的 package.json 文件,并自动执行安装。
corepack up
检索本地项目中使用的包管理器的当前主要发行版的最新可用版本,并更新项目以使用它。
与corepack use
不同,此命令不采用包管理器名称或版本范围,因为它将始终从同一主行中选择最新的可用版本。如果您需要升级到新的专业,请使用显式的corepack use {name}@latest
调用(或者简单地corepack use {name}
)。
COREPACK_DEFAULT_TO_LATEST
可以设置为0
以指示 Corepack 不要在远程注册表中查找所选包管理器的最新版本,并且在下载同一主线的新版本时不更新“最后一次正确”版本。
COREPACK_ENABLE_AUTO_PIN
可以设置为0
以防止 Corepack 在检测到本地包未列出它时更新packageManager
字段。一般来说,我们建议始终列出packageManager
字段(您可以通过corepack use [name]@[version]
轻松设置),因为它确保您的项目安装始终是确定性的。
COREPACK_ENABLE_DOWNLOAD_PROMPT
可以设置为0
以防止 Corepack 在需要下载软件时显示 URL,也可以设置为1
以显示 URL。默认情况下,当显式调用 Corepack 时(例如corepack pnpm …
),它被设置为0
;当隐式调用 Corepack 时(例如pnpm …
),它被设置为1
。当标准输入是 TTY 并且未检测到 CI 环境时,Corepack 将在开始下载之前要求用户输入。
COREPACK_ENABLE_UNSAFE_CUSTOM_URLS
可以设置为1
,以允许使用自定义 URL 来加载 Corepack 已知的包管理器( yarn
、 npm
和pnpm
)。
COREPACK_ENABLE_NETWORK
可以设置为0
以阻止 Corepack 访问网络(在这种情况下,您将负责使用corepack install -g --cache-only
来补充您将运行的项目所需的包管理器版本)。
COREPACK_ENABLE_STRICT
可以设置为0
以防止 Corepack 在包管理器与当前项目定义的包管理器不对应时抛出错误。这意味着如果用户正在使用当前项目中指定的包管理器,它将使用项目的packageManager
字段指定的版本。但是,如果用户使用与当前项目指定的包管理器不同的其他包管理器,它将使用系统范围的包管理器版本。
COREPACK_ENABLE_PROJECT_SPEC
可以设置为0
以防止 Corepack 检查包管理器是否与为当前项目定义的包管理器相对应。这意味着无论项目的packageManager
字段中指定了什么,它将始终使用系统范围的包管理器。
可以设置COREPACK_HOME
以定义 Corepack 应安装包管理器的位置。默认情况下,它在 Windows 上设置为%LOCALAPPDATA%nodecorepack
,在其他地方设置为$HOME/.cache/node/corepack
。
COREPACK_ROOT
对 Corepack 本身没有功能影响;当 Corepack 向底层包管理器提供 shell 时,它会自动在您的环境中设置,以便它们可以通过功能检测它的存在(对于像yarn init
这样的命令很有用)。
COREPACK_NPM_REGISTRY
设置从 npm 检索包管理器时使用的注册表基本 url。默认值为https://registry.npmjs.org
COREPACK_NPM_TOKEN
在连接到 npm 类型注册表时设置 Bearer 令牌授权标头。
COREPACK_NPM_USERNAME
和COREPACK_NPM_PASSWORD
用于在连接到 npm 类型注册表时设置基本授权标头。请注意,这两个环境变量都是必需的并且为纯文本。如果要发送空密码,请显式将COREPACK_NPM_PASSWORD
设置为空字符串。
通过node-proxy-agent
支持HTTP_PROXY
、 HTTPS_PROXY
和NO_PROXY
。
COREPACK_INTEGRITY_KEYS
可以设置为空字符串或0
以指示 Corepack 跳过完整性检查,或者设置为包含自定义密钥的 JSON 字符串。
运行corepack
命令时可能会出现各种网络问题。需要检查的事项:
确保您的网络连接处于活动状态。
确保您的请求的主机可以通过您的 DNS 解析;尝试在 shell 中使用curl [URL]
(ipv4) 和curl -6 [URL]
(ipv6)。
检查您的代理设置(请参阅环境变量)。
请参阅CONTRIBUTING.md
。
请参阅LICENSE.md
。