- 断言测试
- 异步上下文跟踪
- 异步钩子
- 缓冲(Buffer)
- C++ 插件
- 使用 Node-API 的 C/C++ 插件
- C++ 嵌入 Node环境
- 子进程(Child processes)
- 集群(Cluster)
- 命令行选项
- 控制台(Console)
- 核心包(Corepack)
- 加密(Crypto)
- 调试器(Debugger)
- 已弃用的 API
- 诊断通道(Diagnostics Channel)
- 域名系统(DNS)
- 域(Domain)
- 错误(Errors)
- 事件(Events)
- 文件系统(File system)
- 全局变量(Globals)
- HTTP
- HTTP/2
- HTTPS
- 检查器(Inspector)
- 国际化
- 模块:CommonJS 模块
- 模块:ECMAScript 模块
- 模块:
node:module
API - 模块:packages 模块
- 网络(Net)
- 系统(OS)
- 路径(Path)
- 性能挂钩(Performance hooks)
- 性能挂钩(Permissions)
- 进程(Process)
- Punycode 国际化域名编码
- 查询字符串(Query strings)
- 命令行库(Readline)
- REPL 交互式编程环境
- 诊断报告
- 单个可执行应用程序
- Stream 流
- 字符串解码器
- 单元测试
- 定时器(Timers)
- 传输层安全/SSL
- 跟踪事件
- TTY
- UDP/数据报
- URL
- 实用程序
- V8
- 虚拟机
- WebAssembly
- Web加密 API(Web Crypto API)
- 网络流 API(Web Streams API)
- 工作线程(Worker threads)
- zlib
Node.js v18.18.2 文档
- Node.js v18.18.2
- ► 目录
-
►
索引
- Assertion testing
- Asynchronous context tracking
- Async hooks
- Buffer
- C++ addons
- C/C++ addons with Node-API
- C++ embedder API
- Child processes
- Cluster
- Command-line options
- Console
- Corepack
- Crypto
- Debugger
- Deprecated APIs
- Diagnostics Channel
- DNS
- Domain
- Errors
- Events
- File system
- Globals
- HTTP
- HTTP/2
- HTTPS
- Inspector
- Internationalization
- Modules: CommonJS modules
- Modules: ECMAScript modules
- Modules:
node:module
API - Modules: Packages
- Net
- 系统(OS)
- 路径(Path)
- Performance hooks
- Permissions
- 进程(Process)
- Punycode
- Query strings
- 命令行库(Readline)
- REPL 交互式编程环境
- Report
- Single executable applications
- Stream
- String decoder
- Test runner
- Timers
- TLS/SSL
- Trace events
- TTY
- UDP/datagram
- URL
- Utilities
- V8
- VM
- WASI
- Web Crypto API
- Web Streams API
- Worker threads
- Zlib
- ► 其他版本
- ► 选项
核心包#
Corepack是一个实验性工具,可帮助管理包管理器的版本。它为每个受支持的包管理器公开二进制代理,在调用时,将识别为当前项目配置的任何包管理器,根据需要透明地安装它,最后运行它,而不需要显式的用户交互。
此功能简化了两个核心工作流程:
-
它简化了新贡献者的入职流程,因为他们不再需要遵循特定于系统的安装过程来获得您想要的包管理器。
-
它允许您确保团队中的每个人都将准确使用您想要的包管理器版本,而无需他们在每次需要更新时手动同步。
工作流程#
启用该功能#
由于其实验状态,Corepack 目前需要明确启用才能产生任何效果。为此,请运行corepack enable
,这将在您的环境中的node
二进制文件旁边设置符号链接(并在必要时覆盖现有符号链接)。
从此时起,对支持的二进制文件的任何调用都将无需进一步设置即可运行。如果您遇到问题,请运行
corepack disable
从系统中删除代理(并考虑在Corepack 存储库上提出问题来告知我们)。
配置包#
Corepack 代理将在当前目录层次结构中找到最接近的package.json
文件以提取其"packageManager"
属性。
如果该值对应于受支持的包管理器,Corepack 将确保对相关二进制文件的所有调用都针对请求的版本运行,根据需要下载它,如果无法成功检索则中止。
升级全球版本#
当在现有项目之外运行时(例如运行
yarn init
时),Corepack 默认情况下将使用与每个工具的最新稳定版本大致对应的预定义版本。可以通过运行corepack prepare
命令以及您想要设置的包管理器版本来覆盖这些版本:
corepack prepare [email protected] --activate
或者,可以使用标签或范围:
corepack prepare pnpm@latest --activate
corepack prepare yarn@stable --activate
离线工作流程#
许多生产环境没有网络访问权限。由于 Corepack 通常直接从其注册表下载包管理器版本,因此它可能与此类环境发生冲突。为了避免这种情况发生,请在您仍然具有网络访问权限时调用
corepack prepare
命令(通常在您准备部署映像的同时)。这将确保即使没有网络访问,所需的包管理器也可用。
prepare
命令有各种标志。有关更多信息,请参阅详细的
Corepack 文档。
支持的包管理器#
以下二进制文件通过 Corepack 提供:
包管理器 | 二进制名称 |
---|---|
yarn | yarn , yarnpkg |
PNPM | pnpm , pnpx |
常见问题#
Corepack 如何与 npm 交互?#
虽然 Corepack 可以像任何其他包管理器一样支持 npm,但默认情况下不启用它的垫片。这会产生一些后果:
-
始终可以在配置为与另一个包管理器一起使用的项目中运行
npm
命令,因为 Corepack 无法拦截它。 -
虽然
npm
是"packageManager"
属性中的有效选项,但缺少填充程序将导致使用全局 npm。
运行npm install -g yarn
不起作用#
npm 可防止在进行全局安装时意外覆盖 Corepack 二进制文件。要避免此问题,请考虑以下选项之一:
-
不要运行此命令;无论如何,Corepack 都会提供包管理器二进制文件,并确保请求的版本始终可用,因此不需要显式安装包管理器。
-
将
--force
标志添加到npm install
;这将告诉 npm 可以覆盖二进制文件,但您将在此过程中删除 Corepack 的二进制文件。(运行corepack enable
将它们添加回来。)