與 Android 中的 JCenter/Maven洽损、iOS 中的 CocoaPods/SPM/Carthage庞溜、前端中的 npm 庫類似,Dart 提供了官方的包倉庫 Pub用來管理代碼和資源碑定。
在 Dart 中流码,庫和應用都屬于包。pubspec.yaml
是包的配置文件延刘,包含了包的元數(shù)據(jù)(比如漫试,包的名稱和版本)、運行環(huán)境(也就是 Dart SDK 與 Fluter SDK 版本)碘赖、外部依賴驾荣、內(nèi)部配置(比如,資源管理)普泡。
下面我們看一個應用配置文件播掷,其版本為 1.0,Dart 運行環(huán)境支持 2.1 至 3.0 之間撼班,依賴 flutter
和 cupertino_icon
:
name: flutter_app_example #應用名稱
description: A new Flutter application. #應用描述
version: 1.0.0
#Dart運行環(huán)境區(qū)間
environment:
sdk: ">=2.1.0 <3.0.0"
#Flutter依賴庫
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.1
運行環(huán)境和依賴庫 cupertino_icons
冒號后面的部分是版本約束信息歧匈,由一組空格分隔的版本描述組成,可以支持指定版本砰嘁、版本號區(qū)間件炉,以及任意版本這三種版本約束方式。
pubspec.yaml
中矮湘,除了可以用這種方式引用pub公開發(fā)布的第三方包外斟冕,我們還可以使用本地路徑或 Git 地址的方式進行包聲明
dependencies:
package1:
path: ../package1/ #路徑依賴
date_format:
git:
url: https://github.com/xxx/package2.git #git依賴
pub除了管理第三方依賴,包管理工具 Pub 的另一個職責是板祝,找出一組同時滿足每個包版本約束的包版本宫静。包版本一旦確定,接下來就是下載對應版本的包了券时。
對于 dependencies 中的不同數(shù)據(jù)源孤里,Dart 會使用不同的方式進行管理,最終會將遠端的包全部下載到本地橘洞。比如捌袜,對于 Git 聲明依賴的方式,Pub 會 clone Git 倉庫炸枣;對于版本號的方式虏等,Pub 則會從 pub.dartlang.org 下載包弄唧。如果包還有其他的依賴包,比如 package1
包還依賴 package3
包霍衫,Pub 也會一并下載候引。
然后,在完成了所有依賴包的下載后敦跌,Pub 會在應用的根目錄下創(chuàng)建 .packages
文件澄干,將依賴的包名與系統(tǒng)緩存中的包文件路徑進行映射,方便后續(xù)維護柠傍。
最后麸俘,Pub 會自動創(chuàng)建 pubspec.lock
文件。pubspec.lock
文件的作用類似 iOS 的 Podfile.lock
或前端的 package-lock.json
文件惧笛,用于記錄當前狀態(tài)下實際安裝的各個直接依賴从媚、間接依賴的包的具體來源和版本號。
比較活躍的第三方包的升級通常比較頻繁患整,因此對于多人協(xié)作的 Flutter 應用來說拜效,我們需要把 pubspec.lock
文件也一并提交到代碼版本管理中,這樣團隊中的所有人在使用這個應用時安裝的所有依賴都是完全一樣的并级,以避免出現(xiàn)庫函數(shù)找不到或者其他的依賴錯誤拂檩。
除了提供功能和代碼維度的依賴之外,包還可以提供資源的依賴嘲碧。在依賴包中的 pubspec.yaml
文件已經(jīng)聲明了同樣資源的情況下稻励,為節(jié)省應用程序安裝包大小,我們需要復用依賴包中的資源愈涩。
Image.asset('assets/placeholder.png', package: 'package4');