快速提示—解决Dart包版本冲突,比以往更快

由Iiro Krankka撰写于2018年8月28日

免责声明:这是您真正要读到最后的那些文章之一。

您在Flutter上玩的次数越多,并在项目中引入新的依赖关系,则在某个时候就更有可能遇到依赖关系冲突。 特别是在发生重大更新时。

迟早您会遇到这样的情况:

因为intl_translation 0.17.0取决于petitparser ^ 1.1.3,而xml> = 3.2.0取决于petitparser ^ 2.0.0,所以intl_translation 0.17.0与xml> = 3.2.0不兼容。

因此,由于my_project同时依赖xml ^ 3.2.0和intl_translation 0.17.0,因此版本解析失败。

从错误消息中可以明显看出,这些版本的xmlintl_translation软件包不能很好地配合使用。 由于这些软件包依赖于petitparser的不同主要版本, petitparser这里存在无法解决的依赖版本冲突。

pubspec.yaml文件可能看起来像这样:

  依赖项
#...
xml :^ 3.2.0
国际翻译 :^ 0.17.0

尽管我们可以访问pub.dartlang.org并通过反复试验手动找到兼容的版本,但我们不必这样做。

正是为此而做的 。 它也内置在Pub中,并且比以往任何时候都快。

解决此问题的最快方法是将两个相互冲突的依赖项的版本设置为any

等等-我知道你在想什么。 而且我们不会把它们当作 any

  依赖项
#...
xml :任何#<-不要像这样离开我-进一步阅读!
intl_translation :任何 #<-也不要这样离开我!

这将版本限制从主要版本( 1.xx - 2.xx )放到了该软件包的任何版本中。

这使 pub的版本约束求解器 发挥作用,并为您找出兼容的软件包。 更改之后,通过运行flutter packages get重新获取依赖项。

很可能发生以下情况:

 解决依赖性... 
有依赖性!

我们还没有完成!

获得兼容版本后, 您应该像以前一样重新将依赖关系版本重新使用语义版本。

打开生成的pubspec.lock文件,然后查找以前冲突的依赖项。

  #由pub生成 
#参见https://www.dartlang.org/tools/pub/glossary#lockfile
套餐
xml
#...
version :“ 3.0.1”#运行良好的“ xml”软件包的版本
#与“ intl_translation”一起使用。
intl_translation
#...
version :“ 0.17.0”#“ intl_translation”软件包的版本
#与“ xml”一起使用时效果很好。

从该锁定文件中,我们可以看到xml软件包3.0.1版和intl_translation软件包0.17.0版配合使用。 最后一步,用pubspec文件上的正确版本替换any版本:

  依赖项
#...
xml :^ 3.0.1
国际翻译 :^ 0.17.0

上一次通过运行flutter packages get来重新获取依赖项,以验证它确实有效,然后就可以开始工作了。

请记住:您永远都不应保留 any 版本 -只是在问麻烦。 从pubspec.lock中找到兼容的版本并使用那些版本。 具有不确定性的依赖关系是确保将来以难以调试的方式破坏应用程序的可靠方法。 只是不要这样做。


由Iiro Krankka撰写于2018年8月28日

Iiro Krankka(@koorankka)| 推特

Iiro Krankka(@koorankka)的最新推文。 Google Flutter开发人员专家。 Android,Kotlin和Java…

twitter.com