在纱线工作区中,如何强制解决子项目的依赖关系?

Posted

技术标签:

【中文标题】在纱线工作区中,如何强制解决子项目的依赖关系?【英文标题】:Within a yarn workspace, how can I force a resolution for a child project's dependency? 【发布时间】: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 的作用域(有斜线)。

【问题讨论】:

【参考方案1】:

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

【讨论】:

很棒的建议?? 拯救了我该死的一周! 那么您如何将其范围限定为仅限制包 B 的分辨率?有没有办法处理 glob? @light24bulbs 是的,这里详细介绍了如何限制特定软件包的分辨率:classic.yarnpkg.com/en/docs/selective-version-resolutions/…

以上是关于在纱线工作区中,如何强制解决子项目的依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何保持纱线工作区依赖关系同步

阿里规范 - 工程结构 - 二方库依赖 - 7. 强制禁止在子项目的 pom 依赖中出现相同的 GroupId,相同的 ArtifactId,但是不同的 Version。

解决纱线工作区中的 TypeScript 依赖项

无法解析角度离子项目的依赖关系树

如何通过父pom中的dependencyManagement强制maven依赖版本?

依赖关系在错误的地方与纱线