我的包中有一个名为 temp 的 build.yaml
builders:
my_package:
import: "package: my_package/my_package.dart"
builder_factories: ["myBuilder"]
build_extensions: {'.dart': ['.g.dart']}
auto_apply: none
build_to: source
我确认 my_package 已正确导入到 pubspec.yaml 中。然后我将这个构建器放在包 my_package 中,并将其导出。该文件位于 my_package 中的 lib/my_package.dart
library my_package;
import 'package:build/build.dart';
Builder myBuilder(BuilderOptions options) {
return SimpleBuilder();
}
class SimpleBuilder extends Builder {
SimpleBuilder();
@override
Map<String, List<String>> get buildExtensions => {
'.dart': ['.g.dart']
};
@override
Future<void> build(BuildStep buildStep) async {
log.info('SimpleBuilder: Processing ${buildStep.inputId.path}');
final outputId = buildStep.inputId.changeExtension('.g.dart');
final content = 'Generated content for ${buildStep.inputId.path}';
log.info('SimpleBuilder: Writing to ${outputId.path}');
await buildStep.writeAsString(outputId, content);
}
}
在包含 build.yaml 的包 temp 中,我有一个 dart 文件
lib/filename.dart
我跑步
dart run build_runner build --verbose
我希望文件出现在
lib/filename.g.dart
但是什么也没发生,为什么?它输出这个
dart run build_runner build --verbose
Resolving dependencies in `/my_drive/temp`...
Downloading packages...
Got dependencies in `/my_drive/temp`.
Building package executable...
Built build_runner:build_runner.
[INFO] Entrypoint:Generating build script...
[INFO] Entrypoint:Generating build script completed, took 157ms
[INFO] Bootstrap:Precompiling build script......
[INFO] Bootstrap:Precompiling build script... completed, took 2.0s
[FINE] Bootstrap:Core package locations file does not exist
[INFO] BuildDefinition:Initializing inputs
[INFO] BuildDefinition:Building new asset graph...
[INFO] BuildDefinition:Building new asset graph completed, took 513ms
[INFO] BuildDefinition:Checking for unexpected pre-existing outputs....
[INFO] BuildDefinition:Checking for unexpected pre-existing outputs. completed, took 0ms
[INFO] Build:Running build...
[INFO] Build:Running build completed, took 3ms
[INFO] Build:Caching finalized dependency graph...
[INFO] Build:Caching finalized dependency graph completed, took 34ms
[INFO] Build:Succeeded after 41ms with 0 outputs (0 actions)
我做错了什么?日志也没有显示。
当我更改导入或构建工厂时,当我构建包或构建工厂不存在时,它确实会抛出错误,这使我相信导入和构建工厂已正确配置。
配置构建器的文件
build.yaml
位于包含构建器源代码的包的根目录中。您必须将 build.yaml
移动到 my_package
的根目录。通常将构建器导出到位于 builder.dart
的名为 lib
的文件中。
然后build.yaml
变成:
builders:
my_builder:
import: "package:my_package/builder.dart"
builder_factories: ["myBuilder"]
build_extensions: {'.dart': ['.g.dart']}
auto_apply: none
build_to: source
通过这些更改,包
temp
的构建将按预期进行。例如,文件 filename.g.dart
的内容为:
Generated content for lib/filename.dart
您的包中可以有一个可选的
build.yaml
文件 temp
,这一事实可能会引起一些混乱。例如:
targets:
$default:
builders:
# Configure the builder `pkg_name|builder_name`
my_package|my_builder:
enabled: true
# generate_for:
# - lib/*.dart
# options:
您可以在此处启用/禁用或配置构建器。请注意,我将您的构建器命名为:
my_builder
,并且使用语法访问它:my_package|my_builder
。