13

我正在使用一个库,该库支持另一个具有多种版本的库作为对等依赖项。不幸的是,工作区的其中一个子项目引入了与使用该库的子项目不同的版本。结果,它们最终需要不同的版本。

我正在尝试使用选择性分辨率来处理此问题并强制它使用正确的版本(https://yarnpkg.com/lang/en/docs/selective-version-resolutions/),但我没有任何运气。

我可能误解了如何使用这些。

我当前的设置是我有一个根工作区,里面有这些孩子:项目 A package.json(这是问题的根源):

   dependencies: {
      backbone.marionette: '2.4.1'
   }

项目 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"
    }

有任何想法吗?基于对纱线问题的一些挖掘以及它们的一些选择性依赖 PR(请参阅https://github.com/yarnpkg/yarn/issues/4874),我相信这可能是由于 UILibrary 的作用域(有斜线) )。

4

1 回答 1

44

我最近遇到了类似的事情;我发现resolutions它只适用于 root package.json。尝试移动resolutions那里而不是包 B 中。

于 2019-04-19T17:25:56.090 回答