我无法让构建运行程序生成任何内容

问题描述 投票:0回答:1

我的包中有一个名为 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)

我做错了什么?日志也没有显示。

当我更改导入或构建工厂时,当我构建包或构建工厂不存在时,它确实会抛出错误,这使我相信导入和构建工厂已正确配置。

dart build code-generation build-runner
1个回答
0
投票

配置构建器的文件

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

© www.soinside.com 2019 - 2024. All rights reserved.