【发布时间】:2019-06-04 19:39:28
【问题描述】:
我正在使用一个库,该库支持另一个具有广泛版本的库作为对等依赖项。不幸的是,工作区的其中一个子项目引入了与使用该库的子项目不同的版本。因此,它们最终需要不同的版本。
我正在尝试使用选择性分辨率来处理此问题并强制它使用正确的版本 (https://yarnpkg.com/lang/en/docs/selective-version-resolutions/),但我没有任何运气。
我可能误解了如何使用这些。
我当前的设置是我有一个根工作区,里面有这些孩子: 项目 A package.json(这是问题的根源):
dependencies: {
backbone.marionette: '2.4.1'
}
Project B package.json(这是有问题的应用程序):
dependencies: {
backbone.marionette: '1.8.8',
@organization/UILibrary: '0.0.22'
}
@organization/UILibrary(位于工作区之外)package.json 如下所示:
peerDependencies: {
backbone.marionette: ">= 1 < 3"
}
不幸的是,尽管项目 B 不依赖于项目 A,但当 @organization/UILibrary 被拉入项目 B 时,它会因为它的需要而获得 backbone.marionette 版本 2.4.1(而项目 B 的本地需要获得 1.8.8 )。
我尝试使用解决方案是将 Project B package.json 更新为:
dependencies: {
backbone.marionette: '1.8.8',
@organization/UILibrary: '0.0.22'
},
{
"resolutions": {
"@organization/**/backbone.marionette": "1.8.8",
"@organization/backbone.marionette": "1.8.8",
"@organization/UILibrary/backbone.marionette: "1.8.8",
"@organization/UILibrary/**/backbone.marionette: '1.8.8"
}
有什么想法吗?基于对 yarn 问题的一些挖掘以及它们的一些选择性依赖 PR(参见 https://github.com/yarnpkg/yarn/issues/4874),我相信这可能是由于 UILibrary 的作用域(有斜线)。
【问题讨论】: