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
Помощь приветствуется.