前言
我们知道在Flutter项目中,依赖版本管理是通过pubspec.yaml的形式,因此了解yaml的一些简单语法和如何配置使用pubspec.yaml 也是相当的重要,下文会对yaml的使用进行简单介绍
什么是yaml
YAML(YAML Ain't Markup Language)是一种易于阅读的、用于表示结构化数据的序列化格式。因为其语法简洁且可读性强,常用于配置文件和数据交换应用程序中。我们的flutter便是其使用的场景之一
相比较其他方式的配置文件的特点如下
- 可读性强: YAML 的设计目标之一就是提高可读性,相比于 JSON 和 XML,其格式更接近于日常书写的文本,简单明了。
- 缩进表示结构: YAML 使用缩进来表示数据的层级结构,而不是像 JSON 那样使用大括号和方括号,因此更清晰
- 数据表示: YAML 和json 类似也可以表示多种数据结构,如标量(字符串、数值)、列表(数组)、字典(键值对)等。
- 使用范围之广: YAML 被广泛应用于多种编程语言和框架中,特别是在配置文件中,如 Python 的 PyYAML、Ruby 的 Psych 和 Java 的 SnakeYAML,以及Flutter 的pubspec.yaml
pubspec.yaml 中常见字段使用
pubspec.yaml 是 Dart 和 Flutter 项目的配置文件,其中定义了项目的名称、版本、依赖项、环境等信息。虽然它本身是一个静态的配置文件,不支持像编程语言那样的"内部方法",但其格式和配置选项本身可以视为"方法",用于有效地管理项目配置。
1. 项目元数据
name: 指定项目名称,通常是小写字母和下划线。用于在 Dart 和 Flutter 生态系统中标识项目。
dart
name: my_project
description: 项目的描述信息,帮助其他开发者理解项目的用途。
dart
description: A new Flutter project.
version: 项目的版本号,格式为 x.y.z+build。其中 x.y.z 是语义化版本号,+build 是可选的构建号。
dart
version: 1.0.0+1
2. 环境配置
environment: 指定项目所需的 Dart SDK 版本范围,以确保项目在兼容的 SDK 上运行。
dart
environment:
sdk: ">=2.12.0 < 3.0.0"
3. 依赖项管理
dependencies: 列出项目的运行时依赖项,包括第三方库和 Flutter SDK。
dart
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
dev_dependencies: 列出开发环境所需的依赖项,通常用于测试、构建工具等。
dart
dev_dependencies:
flutter_test:
sdk: flutter
mocktail: ^0.3.0
4. Flutter 特定配置
flutter: 包含 Flutter 项目特定的配置选项。
dart
flutter:
uses-material-design: true # uses-material-design: 指定项目是否使用 Material Design 组件。
5. 资源和资产
assets: 指定项目中需要包含的资源文件,如图像、音频等。
dart
assets:
- assets/images/
- assets/audio/
fonts: 配置自定义字体,定义字体家族及其对应的字体文件路径。
dart
fonts:
- family: Raleway
fonts:
- asset: fonts/Raleway-Regular.ttf
- asset: fonts/Raleway-Italic.ttf
style: italic
pubspec.yaml中更多字段说明
1. homepage
说明: 指定项目的主页 URL。
用途: 提供项目的更多信息链接,通常指向项目的官方网站或代码仓库。
dart
homepage: https://example.com
2. repository
说明: 项目源代码的仓库 URL。
用途: 对于开源项目,提供代码仓库的位置。
dart
repository: https://github.com/username/project
3. issue_tracker
说明: 项目的问题跟踪器 URL。
用途: 指向项目的错误报告或问题跟踪页面。
dart
issue_tracker: https://github.com/username/project/issues
4. documentation
说明: 项目的文档 URL。
用途: 指向项目的文档页面,帮助开发者更好地使用和理解项目。
dart
documentation: https://example.com/docs
5. publish_to
说明: 指定包发布的目标。
用途: 如果设置为 "none",表示该包不应发布到 pub.dev。
dart
publish_to: none
6. dependency_overrides
说明: 用于临时覆盖依赖项的版本。
用途: 在特定情况下需要调整依赖版本时使用,不建议长期使用。
dart
dependency_overrides:
some_package: 1.2.3
7. executables
说明: 定义要作为可执行文件导出的 Dart 脚本。
用途: 在 Dart 项目中,指定哪些脚本可以作为命令行工具使用。
dart
executables:
my_tool: bin/my_tool.dart
如何使用 :
激活包: 在项目根目录下运行以下命令,激活你的包。
dart
pub global activate --source path .
运行命令: 激活后,你可以在命令行中使用 my_tool 命令。
dart
my_tool # 可以当成dart脚本使用
8. transformers
说明: 定义项目中使用的编译器转换器。
用途: 在构建过程中,应用指定的代码转换器。
dart
transformers:
- some_transformer
9. platforms
说明: 指定支持的平台。
用途: 定义包或项目支持的平台类型,如 flutter, web, vm。
dart
platforms:
flutter:
web:
vm:
yaml基本语法
YAML 也是有自己的基本语法的,并且相比较json它更灵活,掌握其一些简单的语法才可以在pubspec.yaml 灵活运用
1. 标量
标量是 YAML 中最基本的数据类型,可以是字符串、布尔值、整数、浮点数等。
dart
name: smile
age: 18
is_student: true
其类似json如下格式
dart
{
"name":"smile",
"age":18,
"is_student":true
}
2. 列表
使用连字符 - 表示列表(数组)。
dart
fruits:
- apple
- banana
- pear
其类似json如下格式
dart
{
"fruits":["apple","banana","pear"]
}
3. 字典
字典使用键值对表示(Map)
dart
people:
name: smile
age: 18
sex: boy
其类似json如下格式
dart
{
"people":{
"name":"smile",
"age":18,
"sex":boy
}
}
4.其他语法
但是yaml比json更强大比如下面场景:
多行字符串
多行字符串可以使用 | 或 > 来表示。| 保留换行符,而 > 将换行符替换为空格。
dart
# 可以用来做注释
description: |
This is a multi-line
string that preserves
line breaks.
short_description: >
This is a multi-line
string that folds lines.
锚点和引用
YAML 中的引用和锚点是一种很好用的功能,可以避免重复定义相同的数据结构。它们允许你在 YAML 文档中定义一个数据块,并在其他地方引用这个数据块。这对于复杂的配置文件特别有用,因为它可以减少冗余和维护成本,同时也提高配置文件的可读性
锚点和引用的基础用法
锚点 (&): 用于定义一个数据块,并为它指定一个名称,也可以叫做别名
引用 (*): 用于引用之前定义的锚点。
他们配合使用如下:
dart
default_settings: &default
host: localhost
port: 3306
user: admin
development:
<<: *default
database: dev_db
production:
<<: *default
host: prod.example.com
database: prod_db
其中 <<: 为yaml的合并键其作用就是将我们定义的default_settings合并到development下面类似这样,如果是相同的key 则合并后会被覆盖掉:
dart
development:
host: localhost
port: 3306
user: admin
database: dev_db
复杂键
yaml中还存在复杂键,这种使用场景非常少可以了解下,类似三元运算
dart
?
- key1
- key2
: "value"
数组作为键: 如果数组 [key1, key2] 被用作键,其对应的值是 "value"。
dart
?
name: complex
type: object
: "This is a complex key"
对象作为键: 如果一个对象 {name: complex, type: object} 被用作键,对应的值是 "This is a complex key"。
end
以上基本上把flutter中的pubspec.yaml使用方法和yaml语法基本讲完了,看完这篇博客,基本上就可以上手开发配置了!