Yarn 3.1 🎃👻Corepack、ESM、pnpm、可选包...

2025-06-04

Yarn 3.1 🎃👻Corepack、ESM、pnpm、可选包...

欢迎阅读Yarn 3.1的发行说明!我们对这个版本的发布感到非常兴奋,因为它带来了我们一直期待的各项改进。让我们深入了解一下!

一如既往,请记住,这些只是亮点,完整的更新日志要全面得多。如果你恰好喜欢阅读我们的发布文章,这里有过去的更新日志👇

赞助

Yarn org 需要您的帮助,让我们的工作更具可持续性!更多详情,请访问我们的OpenCollectiveGitHub 赞助商页面😊

目录

改进

Node.js Corepack 集成

你知道 Yarn 现在已随 Node 一起提供吗?这是通过 Node.js Corepack 项目实现的,该项目包含 Yarn 和 pnpm 二进制文件作为 shim。通过将packageManager字段添加到你的package.json,你可以以完全透明的方式强制使用特定的包管理器及其版本:

{
  "packageManager": "yarn@3.1.0"
}
Enter fullscreen mode Exit fullscreen mode

请注意,Corepack 从 Node.js 16.9 开始可用,但目前是可选的。别忘了运行corepack enable一次,以确保 shims 已全局安装!

我们还在 3.1 中改进了init命令以正确支持 Corepack:运行yarn init -2现在将自动设置 Yarn Modern 项目,packageManager并根据需要设置其字段💫

ESM 支持

node_modules使用链接器时,ESM 始终受支持,因为它与 Node 一直支持的旧安装策略相同。然而,由于 PnP 接管了解析管道,因此与 ESM 的兼容性并非必然,必须使用Loader Hook API 来实现。

虽然 Loader Hook API 尚未完全稳定,但最近我们进行了大量的工作,我们的团队已经能够为 ESM 模块提供初步的实验性支持。如果我们检测到您的依赖关系树中的某个包包含某个"type": "module"字段,它应该会自动启用,但您也可以通过设置手动启用或禁用它:

pnpEnableEsmLoader: true
Enter fullscreen mode Exit fullscreen mode

由于实验性,可能会出现一些错误,或者新版本的 Node 会对 API 带来一些重大更改。请务必在我们的错误跟踪器上报告问题!

新安装模式:pnpm

pnpm 包管理器最早提倡在node_modules文件夹内安装包时使用符号链接的工具之一。虽然我们采用了 PnP 的另一种方式,但我们认为实现成本足够低,因此值得添加对这种基于符号链接的安装策略的支持。

从 Yarn 3.1 开始,您可以通过向文件添加以下设置来尝试基于符号链接的安装.yarnrc.yml

nodeLinker: pnpm
Enter fullscreen mode Exit fullscreen mode

条件包

Esbuildswc是两个原生软件包,由于其在竞争对手中表现出色,最近备受关注。它们最近改进了软件包的构建方式,以避免使用复杂的安装后脚本,但这种方式对于 Yarn 项目来说效率不如以前。

optionalDependenciesYarn 3.1 引入了一项新的优化,当某个包被列为列表os和/或字段时,该优化就会生效cpu。当这种情况发生时,Yarn 将跳过获取和安装这些包的操作,除非它们与当前系统参数匹配。

如果您需要手动配置一组严格的软件包体系结构来支持(例如在零安装情况下,您想要从一组不可变的软件包中读取),则可以使用以下supportedArchitectures设置:

supportedArchitectures:
  os: [linux, darwin]
  cpu: [x64, arm64]
Enter fullscreen mode Exit fullscreen mode

智能变更集过滤器

yarn workspaces foreach命令yarn workspaces list现在附带了全新的标志。设置后,这些命令将仅针对与主分支(,取决于您仓库中的分支)--since相比有所更改的包执行。mainmaster

如果您希望仅在某些特定工作区中运行构建,或者仅获取为脚本目的而更改的工作区列表,这会很方便:

yarn workspaces foreach --since run eslint .
yarn workspaces list --since
Enter fullscreen mode Exit fullscreen mode

--since标志还接受一个可选参数(--since=${commit-ish})来手动定义应从中得出更改的源。

新的工作区语法:workspace:^

工作区支持一种特殊的语法workspace:*,即通过 将这些范围在发布时替换为与目标工作区实际版本对应的精确范围。但是,如果您想使用插入符号而不是精确范围,则必须使用详细workspace:^x.y.z格式,Yarn 会在每次发布后在整个仓库范围内更新该格式。

Yarn 现在也支持workspace:^workspace:~通过防止在 Yarn 更新详细范围后发生的大量合并冲突,可以更轻松地在大多数包计划发布的 monorepo 中交叉引用工作区。

此外,作为一种特殊情况,现在也允许在字段中使用以下语法peerDependencies

{
  "peerDependencies": {
    "@my/other-package": "workspace:^"
  }
}
Enter fullscreen mode Exit fullscreen mode
文章来源:https://dev.to/arcanis/yarn-31-corepack-esm-pnpm-optional-packages--3hak
PREV
Docker 为非技术人员提供直观的解释
NEXT
Linux Shell 脚本 DevOps 入门指南