最全的Flutter中pubspec.yaml及其yaml 语法的使用说明

前言

我们知道在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语法基本讲完了,看完这篇博客,基本上就可以上手开发配置了!

相关推荐
Ling_suu24 分钟前
SpringBoot3——Web开发
java·服务器·前端
Yvemil731 分钟前
《开启微服务之旅:Spring Boot Web开发》(二)
前端·spring boot·微服务
hanglove_lucky33 分钟前
本地摄像头视频流在html中打开
前端·后端·html
维李设论36 分钟前
Node.js的Web服务在Nacos中的实践
前端·spring cloud·微服务·eureka·nacos·node.js·express
2401_8576009542 分钟前
基于 SSM 框架 Vue 电脑测评系统:赋能电脑品质鉴定
前端·javascript·vue.js
天之涯上上1 小时前
Pinia 是一个专为 Vue.js 3 设计的状态管理库
前端·javascript·vue.js
@大迁世界1 小时前
摆脱 `<div>`!7 种更语义化的 HTML 标签替代方案
前端·html
高山我梦口香糖2 小时前
[react] <NavLink>自带激活属性
前端·javascript·react.js
Henry_He2 小时前
桌面列表小部件不能点击的问题分析
android
撸码到无法自拔2 小时前
React:组件、状态与事件处理的完整指南
前端·javascript·react.js·前端框架·ecmascript