重要事项:本说明档涉及 Yarn 1(经典版)。
有关 Yarn 2+ 文档和迁移指南,请访问 yarnpkg.com。

选择性依赖解析

Yarn 支持选择性版本解析,使你可以通过 package.json 文件中的 resolutions 域在你依赖关系中定义自定义包版本或范围。通常,这需要在 yarn.lock 文件中进行手动编辑。

请参阅 选择性版本解析 RFC 获得完整规范。

你为何要这样做?

  • 你可能依赖于一个不频繁更新的包,该包又依赖于另一个获得了重要升级的包。在这种情况下,如果直接依赖关系指定的版本范围未涵盖新的子依赖关系版本,你将不得不等待作者。

  • 你的项目的一个子依赖关系获得了一个重要的安全更新,而你不想等待直接依赖关系发布最小版本更新。

  • 你依靠一个不受维护但可正常工作的包,而它的一个依赖关系已升级。你知道升级不会破坏任何东西,并且不想仅仅为了更新一个次要依赖关系而分叉你所依赖的包。

  • 你的依赖关系定义了一个广泛的版本范围,而你的子依赖关系刚刚获得了一个有问题的更新,所以你希望将其固定到早期版本。

如何使用它?

向你的 package.json 文件添加一个 resolutions 域并定义你的版本覆盖内容

package.json

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  },
  "resolutions": {
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "^1.1.2"
  }
}

然后运行 yarn install

技巧和窍门

  • 如果你定义了一个无效解析结果(例如使用无效包名称),你将收到一条警告消息
  • 如果你的解析版本或范围无效,你将收到一条警告消息。
  • 如果你的解析版本或范围与原始版本范围不兼容,你将收到一条警告消息。

限制和注意事项

  • 嵌套包可能无法正常工作。
  • 由于这是一个相当新的功能,某些边缘情况可能无法正常工作。