在我们的项目中,我们正在为不同的区域(比如内联网和互联网)构建相同的角度应用程序。在这些区域中唯一改变的是* .scss文件。为了能够有条件地添加scss文件,根据构建参数我开始覆盖@Component()
之后:
https://stackoverflow.com/a/39755547/1053622
看起来像这样:
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()本身,对吗?
还有其他办法吗?
否则我需要在运行ng build --aot
之前复制/移动/粘贴/删除* .scss文件
非常感谢帮助。