为什么generate_for选项不能与聚合构建器一起使用

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

使用聚合构建器时,我注意到 build.yaml 中 TargetBuilderConfig 上的generate_for 选项会更改行为。仅当目标构建器设置为默认值时,构建器才会输出,而对于普通构建器,设置generate_for确实可以按预期工作。

这是我的文件夹结构

lib
- entity_a.dart
- entity_b.dart
protos

使用

**
的默认generate_for似乎可以工作,并输出一个原始文件,其中包含 protos 文件夹中的聚合内容。但是将generate_for设置为
lib/**.dart
后,它将停止输出proto文件。但为什么呢?

这是我的目标 build.yaml

targets:
  $default:
    builders:
      package_name|builder_name:
        enabled: true
        generate_for:
          - lib/**.dart

仅在删除generate_for时才有效。这是我的生成器包中的 build.yaml。

builders:
  builder_name:
    import: "package:package_name/builders.dart"
    builder_factories: ["build"]
    build_extensions: {'$package$': ['protos/model.proto']}
    build_to: source
    auto_apply: root_package

这是我的建造者

import 'package:build/build.dart';
import 'package:glob/glob.dart';

Builder build(BuilderOptions options) => ProtoBuilder();

class ProtoBuilder implements Builder {
  static final _allFilesInLib = Glob('**.dart');

  static AssetId _allDartFiles(BuildStep buildStep) {
    return AssetId(
      buildStep.inputId.package,
      'protos/model.proto',
    );
  }

  @override
  Map<String, List<String>> get buildExtensions {
    return const {
      r'$package$': ['protos/model.proto'],
    };
  }

  @override
  Future<void> build(BuildStep buildStep) async {
    final files = <String>[];
    await for (final input in buildStep.findAssets(_allFilesInLib)) {
      files.add(input.path);
    }
    final output = _allDartFiles(buildStep);
    return buildStep.writeAsString(output, files.join('\n'));
  }
}
dart yaml aggregate flutter-build build-runner
1个回答
0
投票

我可以重现这个问题,它似乎与合成输入的使用有关

$package$
,另请参阅使用合成输入的构建器

作为解决方法,我建议设置

sources
而不是
generate_for
:

targets:
  $default:
    builders:
      package_name|builder_name:
        enabled: true
        #generate_for:
          #- lib/*.dart
    sources:
      - lib/src/input_folder/**
      - $package$

使用上述配置,例如包含文件

lib/src/input_folder
input1.dart
的附加文件夹
input2.dart
将生成以下输出并将其写入
protos/model.proto
:

lib/src/input_folder/input1.dart
lib/src/input_folder/input2.dart
© www.soinside.com 2019 - 2024. All rights reserved.