Создать HTML-файл углового компонента с помощью компоновщика - PullRequest
0 голосов
/ 07 марта 2019

Я пишу угловой пакет (_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 Ответ

1 голос
/ 07 марта 2019

Причина, по которой это не сработало, как ожидалось, заключалась в том, что auto_apply должно быть none, но внутри цели должно отображаться: enabled: true, например:

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