使用版本范围
假设你想在应用中使用 some_package
和 other_package
,并且它们依赖于不同版本的 url_launcher
。于是我们便有了潜在的冲突。避免这种情况的最好方法是 package 的作者在指定依赖项时使用 版本范围 而非特定版本。
dependencies:
url_launcher: ^0.4.2 # Good, any 0.4.x version where x >= 2 works.
image_picker: '0.1.1' # Not so good, only version 0.1.1 works.
如果 some_package
声明了以上依赖,并且 another_package
声明了一个兼容的 url_launcher
依赖项,如 '0.4.5'
或 ^0.4.0
,pub
能够自动解决冲突问题。类似的注解也适用于插件 package 特定平台 Gradle modules 和/或 CocoaPods 的依赖关系。
即使 some_package
和 another_package
声明了不兼容的 url_launcher
版本,它们实际上仍可能以兼容的方式使用 url_launcher
。
为了确保在更新 package 的时候你的应用不会奔溃,我们建议使用以下格式之一来指定版本范围:
-
范围限制:指定一个最小和最大的版本号,例如:
dependencies: url_launcher: '>=0.1.2 <0.2.0'
-
使用 caret 语法 的范围约束与常规的范围约束类似。
dependencies: collection: '^0.1.2'
强制使用版本
在这种情况下,可在 pubspec.yaml
文件中添加一个依赖覆盖声明 dependency_overrides来强制使用特定版本,从而处理冲突。
为了强制使用版本为 0.4.3
的 url_launcher
,你可以对应用的 pubspec.yaml
文件做如下更改:
dependencies:
some_package:
another_package:
dependency_overrides:
url_launcher: '0.4.3'
如果依赖冲突项不是 package 自身,而是如 guava
这样特定于 Android 的库,那么依赖的覆盖声明必须添加到 Gradle 的构建逻辑中。
为了强制使用版本为 23.0
的 guava
,你可以对 android/build.gradle
文件做如下更改:
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:23.0-android'
}
}
CocoaPods 目前尚不提供依赖项覆盖功能。
更新 package 依赖
当你添加一个 package 后首次运行 flutter pub get
(IntelliJ 中的 ‘Packages Get’),Flutter 将会保存在 pubspec.lock
lockfile 中找到的具体 package 版本。这将确保当你或者团队中其他开发者运行 flutter pub get
后能得到相同版本的 package。
如果你想升级到 package 的最新版本,比如使用 package 的最新特性,请运行 flutter packages upgrade
(Intellij 中的 flutter packages upgrade
)。这将检索你在 pubspec.yaml
文件中指定的版本约束所允许的最高可用版本。
依赖未发布的 package
即使未在 Pub site 上发布,也可以使用 package。对于不用于公开发布的私有插件,或者尚未准备好发布的 package,可以使用其他依赖选项。
-
Path 依赖,Flutter 应用可以通过文件系统
path:
依赖而依赖于插件。路径可以是相对的,也可以是绝对的。例如,要依赖位于应用相邻目录中的插件plugin1
,可以使用以下语法:dependencies: plugin1: path: ../plugin1/
-
Git 依赖:你也可以依赖存储在 Git 仓库中的 package。如果 package 位于仓库的根目录,可以使用以下语法:
dependencies: plugin1: git: url: git://github.com/flutter/plugin1.git
-
Git 依赖于文件夹中的 package:默认情况下,Pub 假定 package 位于 Git 仓库的根目录。如果不是这种情况,你可以使用
path
参数指定位置,例如:dependencies: package1: git: url: git://github.com/flutter/packages.git path: packages/package1
最后,你可以使用
ref
参数将依赖固定到 git 特定的 commit、branch 或者 tag。更多详细信息,请参阅 Pub Dependencies。