pub.dev/android
版本格式:主版本号.次版本号.修订号,版本号递增规则以下:git
any # 全部版本,等同于不写。对pub运行性能有影响,不推荐
1.2.3 # 明确的版本号
'>=1.2.3' # 还有 >1.2.3, <=1.2.3, <1.2.3
^1.2.3 # Caret syntax 等同于 >=1.2.3 <2.0.0
复制代码
若是项目依赖了 A , B 库,他们都依赖了一个 C ,但 C 的版本不一样,可能会产生版本冲突。pub 会尝试找到符合全部依赖约束的版本号。若是找不到能匹配的版本,但 A ,B 库依赖 C 库的 API 是同样的,那么能够添加一个依赖覆盖来强制指定某一版本。 注:pub 是 Dart SDK 提供的一个包管理工具github
dependencies:
some_package:
other_package:
dependency_overrides:
url_launcher: '0.4.3'
复制代码
若是是 Android 平台的库依赖冲突,能够在 app 的 gradle 文件中强制指定版本缓存
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:23.0-android'
}
}
复制代码
pubbash
dependencies:
flutter_kit: ^1.0.0
复制代码
git网络
dependencies:
flutter_kit:
git: git://github.com/bineanzhou/flutter_kit.git
复制代码
指定分支app
dependencies:
flutter_kit:
url: git://github.com/bineanzhou/flutter_kit.git
ref: some-branch
复制代码
pub 默认包目录在 git 仓库的根目录,若是要指定在别的位置,能够用 path 参数ide
dependencies:
flutter_kit:
git:
url: git://github.com/bineanzhou/flutter.git
path: path/to/flutter_kit
复制代码
特别适用在一我的同时开发项目和依赖库的状况。由于修改依赖库的代码,在项目中就能够即时生效,有利于调试和提升效率。工具
dependencies:
transmogrify:
path: /Users/me/transmogrify # 也能够相对路径,相对路径以 pubspec.yml 文件为基准
复制代码
根据依赖与项目的关系,能够分为如下2类:性能
举个例子
好比咱们项目依赖 A ,而 A 又依赖 B , B 又依赖 C 。那么 A 是咱们项目的immediate dependency, B 和 C 就是transitive dependency
咱们能够在命令行中输入命令flutter packages pub deps,查看项目的依赖树。 好比咱们在项目中引入了一个支持网络缓存的图片库cached_network_image: ^0.5.0+1
flutter packages pub deps
Dart SDK 2.1.0-dev.9.4.flutter-f9ebf21297
Flutter SDK 1.0.1-pre.2
your_app_name 2.2.0+10 # 项目名称和版本
|-- cached_network_image 0.5.1 # 直接依赖
| |-- flutter... # 直接依赖(由于在项目pubspec中也添加了)
| '-- flutter_cache_manager 0.2.0+1 # 传递依赖 | |-- flutter... | |-- http... | |-- path_provider... | |-- shared_preferences... | |-- synchronized 1.5.3 | '-- uuid 1.0.3
| |-- convert...
| '-- crypto... ... 复制代码
根据依赖的做用范围,能够分为:
举个例子
项目的 pubspec.yml 以下。若是 A 有一个 dev_dependencies 依赖 dev_C ,项目最终的依赖是 A , dev_B;不包括 dev_C。
dependencies:
A:
dev_dependencies:
dev_B:
复制代码
适应场景:若是你须要 import 到 lib 或者 bin 目录,那么选择 dependencies ; 若是你只须要 import 到 test , example 等,那么就选择 dev dependencies 。使用 dev dependencies 的好处是能让依赖树更小,从而使 pub 运行更快,能跟容易找到知足全部约束的包版本。
在获取一个新的依赖时,pub 会下载知足版本条件的最新版本,而后把版本信息添加到一个 lockfile 中。这个 lockfile 文件叫 pubspec.lock ,位于项目 pubspec.yml 的同级目录。它列出了项目的每一个依赖(包括直接依赖和传递依赖)的版本信息。咱们应该把这个 lockfile 添加到版本控制中,这样不论开发环境,生产环境都能确保使用了相同的依赖版本。
举个例子
项目的 pubspec.yml 文件包含以下依赖
...
dependencies:
flutter:
sdk: flutter
cached_network_image: ^0.5.0+1
dev_dependencies:
flutter_test:
sdk: flutter
...
复制代码
结合上面提到知识,咱们来看看 pubspec.lock 的内容。 lockfile 把全部依赖树打平,并根据首字母排序
cached_network_image:
dependency: "direct main" # 直接依赖,常规依赖
description:
name: cached_network_image
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.5.1"
flutter:
dependency: "direct main" # 直接依赖,常规依赖
description: flutter
source: sdk
version: "0.0.0"
flutter_test:
dependency: "direct dev" # 直接依赖,开发依赖
description: flutter
source: sdk
version: "0.0.0"
uuid:
dependency: transitive # 传递依赖
description:
name: uuid
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.3"
...
复制代码
若是非首次获取依赖,pub 会从 lockfile 中读取版本。若是想升级到知足 pubspec.yml 中约束的最新版本,能够执行 flutter packages upgrade 命令,升级后会更新 lockfile 中的版本。