在一个 yarn workspace 中,我该如何强制解决子项目的依赖关系?

22

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

我正在尝试使用选择性解析来处理这个问题并强制它使用正确的版本(https://yarnpkg.com/lang/en/docs/selective-version-resolutions/),但是我没有成功。

我可能误解了如何利用它们。

我的当前设置是:我有一个根工作区,其中包含以下子项目:

Project A package.json(这是问题的来源):

   dependencies: {
      backbone.marionette: '2.4.1'
   }

项目B的package.json文件(该应用程序存在问题):

Translated text:

Project B's package.json file (the application with issues):

  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)。

我尝试使用resolutions来更新项目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被作用域限制(有斜杠)所致。

1个回答

62
我最近遇到了类似的问题;我发现resolutions只在根目录下的package.json中起作用。尝试将resolutions移到那里,而不是在B包中。

3
你如何将其范围限制在包B的分辨率上?是否有使用通配符的方法? - light24bulbs
2
@light24bulbs 是的,如何限制特定软件包的版本分辨率在这里有详细说明:https://classic.yarnpkg.com/en/docs/selective-version-resolutions/#toc-how-to-use-it - Hooray Im Helping
3
除了不那么详细外,将以下与编程相关的内容从英文翻译成中文。只返回翻译后的文本:路径的格式不清楚。它是包名还是文件夹结构?作用域名称呢?Yarn似乎决定不喜欢我的尝试,所以在没有任何解释的情况下从我的package.json中删除它们。 - Jason Kleban
2
但是如何指定工作区呢?我尝试过的所有语法版本都不起作用。目前只能使用所有工作区或不使用任何工作区。 - Ivan P
这个有任何更新吗?Yarn 3 不支持模式。 - Andrii Tsarenko
如果你想进入包B并在其中安装,就像它是独立的一样,该怎么办? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接