本文將詳細介紹 pubspec.yaml 的作用及其使用方法,這是一個用於管理包版本的文件。
yaml 是什麼?
YAML 是 “YAML Ain’t Markup Language” 的縮寫,
是一種簡潔的數據序列化語言,用於表示數據。
常用於配置文件(如 Config 文件)和數據文件(如 JSON)。
YAML 的特點是使用縮進來表示層次結構,類似於 Python。
flutter 的 pubspec.yaml 是什麼?
“pubspec.yaml” 是 Flutter 項目的配置文件,
管理應用程式的名稱、描述、版本信息以及項目所依賴的包信息、
這些包的版本等。
pubspec.yaml 的結構
“pubspec.yaml” 的基本結構如下:
- “name”:
應用程式的名稱。 - “description”:
應用程式的簡單描述。 - “version”:
應用程式的版本。 - “environment”:
指定該項目依賴的 Flutter SDK 版本。 - “dependencies”:
指定該項目依賴的外部包。 - “dev_dependencies”:
指定僅在開發期間使用的包(如測試框架)。
buildrunner 和 riverpod_generator 等在開發期間運行的包定義在此。
實際寫法如下:
name: check
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.17.6 <3.18.2"
dependencies:
cupertino_icons: 1.0.2
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
flutter_riverpod:
dev_dependencies:
build_runner: ^2.4.0
dart_code_metrics: ^5.7.0
flutter_test:
sdk: flutter
pubspec.yaml 的版本意義
包的版本號以 “主.次.修補” 的格式表示。
各數字的含義如下:
- “主版本”:在進行不兼容的大變更時增加。
- “次版本”:在不影響現有功能的前提下添加功能時增加。
- “修補”:在修復錯誤或進行小變更時增加。
例如,指定 [包名: 3.12.4],則主版本為 3,次版本為 12,修補為 4。
pubspec.yaml 的版本指定
pubspec.yaml 的版本指定可以如下書寫:
包名:[空白]
不指定版本。自動選擇最新版本。
由於某些破壞性變更(如現有代碼無法運行等),
建議對重要包指定具體版本。
包名: 1.0.0
指定版本。選擇記載的版本。
包名: “>=1.0.0 <2.0.0”
指定版本範圍。在範圍內選擇版本。
包名: ^1.0.0
在指定版本以上,且主版本相同的範圍內自動選擇版本。這與 “>=1.0.0 <2.0.0” 同義。
不指定版本時,自動選擇最新版本。為避免預期外問題,建議對重要包指定具體版本。
pubspec.lock 是什麼?
“pubspec.lock” 文件記錄使用的各包的具體版本。
當包版本指定為範圍時,可在此確認實際選擇的版本。
版本更新命令
僅編輯 pubspec.yaml 不會自動更新版本。請參考以下命令:
- 安裝: “flutter pub get”
安裝 pubspec.yaml 記載的包。
若已安裝,則更新至最新版本。
- 升級: “flutter pub upgrade”
更新包至最新版本。
若為範圍指定,則更新至範圍內的最新版本。
- 降級: “flutter pub downgrade”
更新包至最早版本。
若為範圍指定,則更新至範圍內的最早版本。
- 版本依賴關係確認: “flutter pub deps”
可確認包之間的版本依賴關係。
顯示項目依賴樹,參照包之間的依賴關係。
- 版本依賴關係確認: “flutter pub deps”
可確認包之間的版本依賴關係。
顯示項目依賴樹,參照包之間的依賴關係。
- 版本確認: “flutter pub outdated”
可確認以下項目的版本信息。
Current:當前版本
Upgradable:pubspec.yaml 文件允許的最新版本
Resolvable:依賴關係的其他包可用的版本
Latest:可用包的最新版本
- 主版本升級: flutter pub upgrade –major-versions
更新 pubspec.yaml 列出的包至可能的最新版本。
- 個別更新: “flutter pub [命令] [包名]
在上述命令後指定包名,可僅更新該包。
例如)安裝 “freezed”:flutter pub get freezed
總結
“pubspec.yaml” 在 Flutter 項目中主要用於包管理,
還可管理項目的元數據定義、外部包的依賴關係、資源指定等。
使用 pubspec.yaml 進行版本管理在 Flutter 應用開發中非常重要。
我經常因版本管理失敗而無法構建,或無法運行 buildrunner。
希望這篇文章能幫助到同樣在 pubspec.yaml 設計上遇到困難的人。