Angular: как переопределить @Component()

В нашем проекте мы создаем одно и то же угловое приложение для разных областей (скажем, интранет и интернет). Единственное, что меняется в этих областях - это *.scss-файлы. Чтобы иметь возможность добавлять scss-файлы условно, в соответствии с параметрами сборки я начал переопределять @Component() следуя этому:

/questions/20720901/dinamicheskij-stil-urls-v-uglovyih-2/20720922#20720922

который выглядит так:

import { Component } from '@angular/core';

export interface ITargetAwareComponentProperties {
  selector: string;
  template?: string;
  templateUrl?: string;
  styles?: string[];
  styleUrls?: string[];
  directives?: any;
  providers?: any;
  encapsulation?: number;
  internetStyles?: string[];
  intranetStyles?: string[];
}

export function TargetAwareComponent(properties: ITargetAwareComponentProperties) {
  try {
    if (!properties.styles) {
      properties.styles = [];
    }

    if (environment.targetType === 'intranet' && properties.intranetStyles) {
      for (const style of properties.intranetStyles) {
        properties.styles.push(style);
      }
    }
    else if (properties.internetStyles) {
      for (const style of properties.internetStyles) {
        properties.styles.push(style);
      }
    }

  } catch (err) {
    console.warn(err);
  }

  return Component(properties);
}

Это работает нормально, пока я не хочу скомпилировать это заранее ng build --aot где я получаю следующее сообщение об ошибке:

ERROR in : Unexpected value 'TextComponent' 
in /Users/.../components/text/text.component.ts' 
declared by the module 'AppCommonModule in /Users/.../common.module.ts'. 
Please add a @Pipe/@Directive/@Component annotation.

Я предполагаю, что угловой не понимает, что @TargetAwareComponent() это @Component() и, следовательно, не компилирует / находит его должным образом.

Я думаю, что на самом деле не поддерживается переопределение самого @Component(), верно?

Есть ли другой способ сделать это?

В противном случае мне нужно будет скопировать / переместить / вставить / удалить *.scss-файлы перед запуском ng build --aot

Помощь приветствуется.

0 ответов

Другие вопросы по тегам