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版本号的含义
包的版本号以“主版本.次版本.补丁”格式表示。
各数字的含义如下:
- “Major(主版本)”:当进行不兼容的重大修改时增加。
- “Minor(次版本)”:在不影响现有功能的情况下添加功能时增加。
- “Patch(补丁)”:进行错误修正或小改动时增加。
例如,指定[包名:3.12.4]时,Major 3,Minor 12,Patch 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 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时遇到困难的人。