Flutter构建工具插件build_runner的使用
Flutter构建工具插件build_runner的使用
build_runner
是Dart的一个包,它提供了一种通过Dart代码生成文件的具体方法。文件总是直接在磁盘上生成,并且重新构建是增量式的,受如Bazel等工具的启发。
安装
为了支持Dart项目的开发,通常需要将build_runner
添加到你的pubspec.yaml
文件中作为开发依赖项(dev_dependencies)。你可以通过运行以下命令来添加:
$ dart pub add dev:build_runner
使用
内置命令
build_runner
包暴露了一个同名的二进制文件,可以通过 dart run build_runner <command>
来调用。可用的命令包括 build
、watch
、serve
和 test
。
build
: 执行一次构建并退出。watch
: 运行一个持久的构建服务器,该服务器会监视文件系统中的编辑并在必要时进行重新构建。serve
: 与watch
类似,但同时运行一个开发服务器。test
: 执行一次构建,创建合并输出目录,然后运行dart run test --precompiled <merged-output-dir>
。
输入
有效的输入遵循一般的Dart包规则。你可以读取任何位于顶层lib
文件夹下的文件,或者来自当前包的所有文件。
输出
你可以在当前包的任何地方输出文件。需要注意的是,当BuilderApplication
指定hideOutput: true
时,它可以输出到任何你依赖的包的lib
文件夹下。此外,生成器不允许覆盖现有文件,只能创建新文件。
源码控制
此包会在你的包中创建一个顶级.dart_tool
文件夹,这个文件夹不应该提交到源码控制系统中。对于生成的文件,一般最好不将其提交到源码控制系统,但具体的Builder
可能会提供不同的建议。
发布包
通常应该将生成的文件与你的包一起发布,但这可能并不总是适用。某些Builder
可能会对此提供特定的建议。
示例代码
下面是一个简单的例子,展示了如何在Flutter项目中使用build_runner
。假设我们有一个名为example_builder
的自定义构建器,它将所有.txt
文件转换为.g.dart
文件。
步骤1:创建构建器
首先,我们需要创建一个构建器类。这可以放在lib/builders/example_builder.dart
中:
import 'package:build/build.dart';
import 'dart:io';
Builder exampleBuilder(BuilderOptions options) => ExampleBuilder();
class ExampleBuilder implements Builder {
@override
final buildExtensions = const {
'.txt': ['.g.dart']
};
@override
Future<void> build(BuildStep buildStep) async {
var inputId = buildStep.inputId;
var content = await buildStep.readAsString(inputId);
var outputId = inputId.changeExtension('.g.dart');
await buildStep.writeAsString(outputId, 'String data = "$content";');
}
}
步骤2:配置构建器
接下来,在build.yaml
中配置构建器:
targets:
$default:
builders:
example_builder|exampleBuilder:
enabled: true
步骤3:执行构建
最后,你可以通过以下命令来运行构建:
$ dart run build_runner build
或者如果你希望在文件更改时自动重新构建,可以使用:
$ dart run build_runner watch
通过以上步骤,你应该能够在Flutter项目中成功使用build_runner
了!如果有更多问题或需要进一步的帮助,请随时提问。
更多关于Flutter构建工具插件build_runner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html