Dart 语言 怎样在 Dart 中使用 build_runner

Dart阿木 发布于 2025-06-19 11 次阅读


在 Dart 中使用 build_runner:自动化构建与代码生成

Dart 是 Google 开发的一种编程语言,广泛应用于 Flutter 框架中。在 Dart 开发过程中,构建和代码生成是两个重要的环节。`build_runner` 是一个 Dart 工具,可以帮助开发者自动化构建过程和生成代码。本文将详细介绍如何在 Dart 中使用 `build_runner`,包括其基本概念、使用方法以及一些高级技巧。

基本概念

1. Build System

在 Dart 中,构建系统负责将源代码转换为目标代码(如 `.dart` 文件转换为 `.dart.js` 文件)。Dart 的构建系统由 `dart2js`、`dart2aot` 和 `dart2sum` 等工具组成。

2. Build Script

构建脚本是一段 Dart 代码,用于定义构建过程中的任务。在 Dart 中,构建脚本通常以 `.dart` 文件的形式存在,并使用 `build_runner` 工具来执行。

3. Build Configuration

构建配置定义了构建过程中的参数和任务。在 Dart 中,构建配置通常以 `.yaml` 文件的形式存在,并包含构建脚本所需的参数。

4. Build Step

构建步骤是构建过程中的一个单元,负责执行特定的任务。`build_runner` 提供了多种构建步骤,如 `generate`、`assemble` 和 `build`。

安装 build_runner

在 Dart 项目中,首先需要安装 `build_runner` 包。可以通过以下命令安装:

dart

dart pub global activate build_runner


创建构建配置

创建一个 `.yaml` 文件,例如 `build.yaml`,用于定义构建配置:

yaml

builders:


- generator: build_runner/lib/src/generators/json_serializable/json_serializable_builder.dart


inputs:


- lib/json_serializable.dart


这个配置定义了一个生成器,它将读取 `lib/json_serializable.dart` 文件,并生成 JSON 序列化代码。

编写构建脚本

创建一个 `.dart` 文件,例如 `build.dart`,用于编写构建脚本:

dart

import 'package:build_runner/build_runner.dart';


import 'package:json_serializable/json_serializable.dart';

void main() {


final builder = GeneratorBuilder(


builder: (inputId) => generateJsonSerializable(inputId),


inputSet: Set.from([


AssetId.fromLibrary('lib/json_serializable.dart'),


]),


);

runBuilder(builder);


}


这个脚本定义了一个生成器,它将读取 `lib/json_serializable.dart` 文件,并生成 JSON 序列化代码。

运行构建

在命令行中,运行以下命令来运行构建:

dart

dart run build_runner build --delete-outputs


这个命令将执行 `build.yaml` 文件中定义的构建任务,并删除旧的输出文件。

高级技巧

1. 使用自定义生成器

`build_runner` 允许开发者创建自定义生成器。以下是一个简单的自定义生成器示例:

dart

import 'package:build_runner/build_runner.dart';

void main() {


final builder = GeneratorBuilder(


builder: (inputId) => generateCustomCode(inputId),


inputSet: Set.from([


AssetId.fromLibrary('lib/custom_code.dart'),


]),


);

runBuilder(builder);


}

String generateCustomCode(AssetId id) {


// 生成自定义代码


return '/ Custom code for $id /';


}


2. 使用插件

`build_runner` 支持插件,可以扩展其功能。以下是一个简单的插件示例:

dart

import 'package:build_runner/build_runner.dart';

void main() {


final builder = GeneratorBuilder(


builder: (inputId) => generateCustomCode(inputId),


inputSet: Set.from([


AssetId.fromLibrary('lib/custom_code.dart'),


]),


);

final plugin = BuildPlugin();


plugin.builders.add(builder);

runBuilder(builder, plugin: plugin);


}


3. 使用缓存

`build_runner` 支持缓存,可以加速构建过程。以下是如何启用缓存的示例:

dart

void main() {


final builder = GeneratorBuilder(


builder: (inputId) => generateCustomCode(inputId),


inputSet: Set.from([


AssetId.fromLibrary('lib/custom_code.dart'),


]),


);

final plugin = BuildPlugin();


plugin.builders.add(builder);


plugin.cache = true;

runBuilder(builder, plugin: plugin);


}


总结

`build_runner` 是一个强大的 Dart 工具,可以帮助开发者自动化构建过程和生成代码。通过使用 `build_runner`,可以显著提高开发效率,并减少重复性工作。本文介绍了 `build_runner` 的基本概念、使用方法以及一些高级技巧,希望对 Dart 开发者有所帮助。