选择性依赖解析
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
。
技巧和窍门
- 如果你定义了一个无效解析结果(例如使用无效包名称),你将收到一条警告消息
- 如果你的解析版本或范围无效,你将收到一条警告消息。
- 如果你的解析版本或范围与原始版本范围不兼容,你将收到一条警告消息。
限制和注意事项
- 嵌套包可能无法正常工作。
- 由于这是一个相当新的功能,某些边缘情况可能无法正常工作。