在 yarn 工作区中,如何强制解决 child 项目的依赖项?

Within a yarn workspace, how can I force a resolution for a child project's dependency?

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

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

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

我当前的设置是我有一个根工作区,里面有这些 children: 项目 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).

我尝试使用决议将项目 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 是有范围的(有一个斜线)。

我 运行 最近喜欢类似的东西;我发现 resolutions 仅在根目录 package.json 中有效。尝试将 resolutions 移到那里而不是包 B 中。