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 中的版本。