使用生成器生成 angular 组件 html 文件

Generate angular component html file with builder

我正在编写一个提供 angular 组件的 angular 程序包 (_shared_angular)。但是应该生成此组件的 .html 文件,因为它将基于其他文件。

我不想签入 .html 文件,我希望它使用默认构建系统生成。

我试过为它写一个构建器,但我很难为包本身生成文件...生成的文件总是放在实际的根包中(包括我的包)。

这是我的 build.yaml 的样子:

targets:
  $default:
    builders:
      _shared_angular|iconsBuilder:
        generate_for:
        - lib/$lib$

builders:
  _shared_angular|iconsBuilder:
    import: "package:_shared_angular/builders/icons_builder.dart"
    builder_factories: ["iconsBuilder"]
    build_extensions: {"lib/$lib$": ["package:_shared_angular/lib/components/icon/icon_component.html"]}
    build_to: cache
    auto_apply: dependents
    runs_before:
    - angular

这就是我的构建器的样子:

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

Builder iconsBuilder(BuilderOptions options) => IconsBuilder();

class IconsBuilder implements Builder {
  @override
  final buildExtensions = const {
    r'lib/$lib$': ['package:_shared_angular/lib/components/icon/icon_component.html']
  };

  @override
  build(BuildStep buildStep) async {
    final templateContent = await _getTemplateContent(buildStep.findAssets(Glob('package:_shared_angular/lib/components/icon/src/*.svg'));
    await buildStep.writeAsString(
        AssetId('_shared_angular', 'lib/components/icon/icon_component.html'), templateContent);
  }
}

但是没用。


编辑: 当我用这个替换 buildExtensions 时它起作用了:r'lib/$lib$': ['lib/components/icon/icon_component.html'] 但我不明白为什么......

它没有按预期工作的原因是因为 auto_apply 应该是 none,但是在目标内部,它应该是:enabled: true 像这样:

targets:
  $default:
    builders:
      _shared_angular|iconsBuilder:
        enabled: true