Dart build_runner无法生成文件,请求排查问题原因
问题
我在名为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
已确认pubspec.yaml中正确导入了my_package,my_package包的lib/my_package.dart文件中实现了对应的Builder并导出:
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); } }
temp包中存在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)
日志中也未出现自定义的打印信息。修改导入路径或builder_factories时会报错,说明配置路径是正确的,请问问题出在哪里?
解决方案
核心问题由两个配置错误导致,逐一修正即可:
build.yaml中import路径的空格问题
配置里的import: "package: my_package/my_package.dart"中,package:后多了一个空格,正确路径应为package:my_package/my_package.dart。这个空格会干扰Builder的匹配逻辑,导致无法正常触发。auto_apply: none未指定触发范围
当auto_apply设为none时,build_runner不会自动将Builder应用到任何文件,必须显式指定处理目标:- 若要让Builder自动处理当前包的所有Dart文件,将
auto_apply改为root_package; - 若需保留
auto_apply: none,需在build.yaml中添加targets配置指定处理范围,示例:targets: $default: builders: my_package: enabled: true generate_for: - lib/**.dart
- 若要让Builder自动处理当前包的所有Dart文件,将
修正后重新执行dart run build_runner build --verbose,即可看到自定义日志并生成对应的.g.dart文件。
内容的提问来源于stack exchange,提问作者anonymous-dev
相关产品推荐
相关产品推荐

