使用生成器生成角度组件html文件

时间:2019-03-07 15:56:29

标签: angular dart angular-dart

我正在编写一个提供角度分量的角度包(_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']时有效,但是我不明白为什么...

1 个答案:

答案 0 :(得分:1)

之所以无法正常工作,是因为auto_apply应该是none,但是在目标内部,它应该显示为:enabled: true,如下所示:

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