#angular #dart #angular-dart
#angular #dart #angular-dart
Вопрос:
Я пишу пакет angular ( _shared_angular
), который предоставляет компонент angular. .html
Файл этого компонента должен быть сгенерирован, хотя бы потому, что он будет основан на других файлах.
Я не хочу, чтобы .html
файл возвращался, и я хочу, чтобы он был сгенерирован с помощью системы сборки по умолчанию.
Я пытался написать для него builder, но мне трудно сгенерировать файл для самого пакета… сгенерированный файл всегда помещается в фактический корневой пакет (который включает мой пакет).
Вот как 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
и вот как выглядит мой builder:
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:
Причина, по которой это не сработало должным образом, заключалась в том, что auto_apply
должно быть none
, но внутри целевого объекта оно должно гласить: enabled: true
вот так:
targets:
$default:
builders:
_shared_angular|iconsBuilder:
enabled: true