在flutter项目中添加依赖项,flutter如何解决安装/获取哪个包,以及如果其中有冲突,它主要如何解决它们。
我们看到 pubspec.yaml 文件中有很多依赖格式,其中之一是:
空的或任何依赖
dependencies:
pluginA: // empty version
pluginB:any // version with `any` keyword
在这两种情况下,都应用了 pluginA 和 pluginB 的最新版本,但不建议这样做。有很多原因,其中之一是因为包版本没有上限,如果在插件的任何新版本中的变动,那么你得依赖项也必须更新。
范围限制:-
dependencies:
pluginA: ‘>=5.4.0 <6.0.0’ // range constraint
pluginA: ‘^5.4.0’ // with caret syntax
两个语句是相同的,并且将应用位于此范围之间的最新版本。这里插入符号语法(^)添加了从当前版本到下一个非破坏版本(不包括破坏版本)的依赖项。
但是对于预发布版本(具有 0 个主要版本代码的版本被认为是像 0.1.1 这样的预发布版本),插入符和范围限制是不同的:
例如 pluginA: '^0.4.0
和 pluginA: '≥0.4.0 < 1.0.0' 是不一样的
因为带有 0 的主要版本被认为处于初始开发阶段,并且可以在任何次要版本中添加包含重大更改的代码。
更多细节:-[查看这个stackoverflow](https://stackoverflow.com/questions/53563079/what-is-the-caret-sign-before-the-dependency-version-number-in-flutters-pub#:~:text=The caret sign ( ^ ) is,non-breaking version is ok.&text=It's shorthand for the longer form.)
因此,在预发布版本的情况下,flutter 会获取插件的最新补丁版本。
在这种特殊情况下pluginA: '^0.4.0'
等于pluginA: '>=0.4.0 < 0.5.0'
简而言之,预发布版本中的克拉语法(^)类似于0.vy,
而在普通版本中它是vxy,其中v
是固定版本代码,x
并且分别y
是动态次要版本和补丁版本。
用例子来说可能更让你明白一些
^2.4.3 等价于 >= 2.4.3 < 3.0.0
^0.17.19 等价于 >= 0.17.19 <0.18.0
注意:- 因为插入符语法是在 Dart 1.8.3 中引入的,所以它需要大于或等于 1.8.3 的 dart 版本。