最全的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语法基本讲完了,看完这篇博客,基本上就可以上手开发配置了!

相关推荐
腾讯TNTWeb前端团队29 分钟前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰4 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪4 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪4 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy5 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom5 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom5 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom6 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom6 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom6 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试