Pub 错误:分析器的版本限制不兼容

Cri*_*cia 5 constraints incompatibility dart dart-pub

我有一个非常奇怪的问题。我有一些依赖项,在添加新依赖项之前工作得很好,但是一旦我添加一个新依赖项(在这种特定情况下async_await),我Incompatible version constraints on analyzer在使用pub get. 奇怪的是:async_await这不是一个不兼容的约束!

Pub 失败,[1] 解决依赖关系...
分析器上不兼容的版本约束:
- Angular 1.0.0 取决于版本 >=0.15.0 <0.19.0
- di 3.3.1 取决于版本 >=0.15.0 <0.22 .0
- redstone_mapper 0.1.1 取决于版本 >=0.13.0 <0.14.0

如果约束仍然失败,为什么当我删除时不显示此错误async_await(另一个导入也发生同样的事情)?

更新

跑步pub upgrade又暴露了另一个问题

解决依赖关系...
分析器上不兼容的版本约束:
- Angular 1.0.0 取决于版本 >=0.15.0 <0.19.0
- async_await 0.0.0 取决于版本 >=0.22.4 <0.23.0

Pubspec.yaml

name: aristadart
description: A sample web application
dependencies:
  angular: 1.0.0
  browser: any
  di: any
  fp: any
  http: any
  mongo_dart: any
  redstone: any
  redstone_mapper: any
  redstone_mapper_mongo: any
  shelf_static: any


transformers:
- redstone_mapper
- angular:
    html_files:
    - lib/components/login/login.html
    - lib/components/login/nuevo_usuario.html
    - lib/components/home/home.html
    - lib/components/evento/evento.html
    - lib/components/vista/vista.html
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 8

只是没有一组依赖项能够满足所有版本约束。
我通过查明某些依赖项的版本来解决此类问题,以使pub get/的生活更轻松pub upgrade,并添加一些dependency_overrides依赖项来强制解决一些差异。
一项一项地添加覆盖,直到不再出现错误为止。

在你的情况下,我必须添加相当多的覆盖

dependency_overrides:
  analyzer: ^0.22.4
  barback: ^0.15.2+2
  code_transformers: ^0.2.3+2
  di: ^3.3.3
  route_hierarchical: ^0.6.1
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以强制包使用未经测试的依赖项,但这是解决该问题的唯一方法(除了更新依赖项本身以使用较新的版本之外,但这通常由其他人控制)。


mun*_*ent 5

Pub 的版本求解器正在对所有依赖项中的所有版本约束进行全局分析。不仅如此,依赖项的每个版本都有不同的约束。

\n\n

这意味着约束失败可能是非局部的。不仅仅是因为async_await有限制才导致问题。可能是这样的:

\n\n
    \n
  • async_await添加了一个约束foo
  • \n
  • 这迫使您采用foo与其他版本不同的版本。
  • \n
  • 这反过来又给你带来了一组不同的约束foo
  • \n
  • 这些反过来又调整了其他依赖项的一些版本。
  • \n
  • 这会导致其他不同的约束......
  • \n
  • 等等...
  • \n
\n\n

实际上,我们最近看到的大多数此类错误似乎都将分析器包作为其关键。分析人员非常频繁地修改该软件包(或者至少有一段时间)并经常更改其次要版本。这意味着有很多软件包依赖于不相交的分析器版本集。

\n\n

就像 @G\xc3\xbcnter 所建议的那样,解决方法是覆盖几个依赖项,这样可能会导致其自身的问题。(它基本上将“pub get time”故障转变为可能的运行时故障。)

\n