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

时间:2015-01-29 03:50:46

标签: dart constraints incompatibility dart-pub

我有一个非常奇怪的问题。我之前添加新依赖项的依赖项工作得很好,但是只要我添加一个新的依赖项(在此特定情况下为async_await),在使用Incompatible version constraints on analyzer时出现pub get错误。奇怪的是:async_await不是一个不兼容的约束!

  

Pub get failed,[1] Resolving dependencies ...不兼容的版本
  对分析仪的限制:
   - 角度1.0.0取决于版本> = 0.15.0< 0.19.0
   - di 3.3.1取决于版本&gt; = 0.15.0 <0.22.0
   - redstone_mapper 0.1.1取决于版本&gt; = 0.13.0&lt; 0.14.0

如果约束仍然失败,为什么在删除async_await(同样的事情发生在另一个导入中)时,这个错误没有显示?

更新

正在运行pub upgrade会发现另一个问题

  

解决依赖关系......
  分析仪的版本限制不兼容:
   - 角度1.0.0取决于版本&gt; = 0.15.0&lt; 0.19.0
   - async_await 0.0.0取决于版本&gt; = 0.22.4&lt; 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

2 个答案:

答案 0 :(得分:3)

所有版本约束都适用,没有一组依赖项 我通过精确定位某些依赖项的版本来解决这些问题,以使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

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

答案 1 :(得分:2)

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

这意味着约束失败可以是非本地的。这不仅仅是async_await有一个导致问题的约束。可能是:

  • async_awaitfoo上添加了约束。
  • 这会迫使你采用不同版本的foo
  • 反过来,这会为您提供一组来自foo的不同约束。
  • 反过来调整其他依赖项的某些版本。
  • 然后导致其他不同的限制......
  • 依旧......

在实践中,我们最近看到的大多数错误似乎都将分析器包作为他们的关键。分析人员经常(甚至至少做了一段时间)修改该包,并经常更改其次要版本。这意味着有很多软件包依赖于不相交的分析器版本集。

与@Günter建议一样,解决方法是覆盖几个依赖项,因此可能会导致自身问题。 (它基本上将“发布时间”故障变为可能的运行时故障。)