You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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应用到任何文件,必须显式指定处理目标:

    1. 若要让Builder自动处理当前包的所有Dart文件,将auto_apply改为root_package;
    2. 若需保留auto_apply: none,需在build.yaml中添加targets配置指定处理范围,示例:
      targets:
        $default:
          builders:
            my_package:
              enabled: true
              generate_for:
                - lib/**.dart
      

修正后重新执行dart run build_runner build --verbose,即可看到自定义日志并生成对应的.g.dart文件。

内容的提问来源于stack exchange,提问作者anonymous-dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:23:13