使用生成器生成 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
我正在编写一个提供 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