使用ng build --prod
构建我的Angular 5应用程序的生产版本并在本地测试后,我遇到以下问题,请参见下图。
有人打电话给/es
这肯定不是我自己写的东西。
我认为它与minification / aot-compiler有关。通过命中运行以下代码的路由来触发调用
export function resolveFn(){
return Contact.$get().then( () => MailFolder.$get());
}
此处,Contact.$get()
转换为/contacts
的获取请求。这是通过自定义库完成的,该库根据应用程序中使用的某些资源的类名构造路径名称。执行此操作的代码段显示在
class RelationConfiguration<T extends Resource, U extends Resource> {
private path: string;
constructor(public HostResource: IResourceConstructor<T>, public RelatedSource: IResourceConstructor<U>, public relationIdentifierKey) {
this.path = `${toPluralDash(this.HostResource.name)}/$hostId/${toPluralDash(this.RelatedSource.name)}/$relatedId`;
}
getPath(hostInstance: T, relatedInstance: U = null, noId?: boolean) {
const related = relatedInstance.id && !noId ? '/' + relatedInstance.id : '';
return this.path.replace('$hostId', hostInstance.id.toString()).replace('/$relatedId', related);
}
}
当console.log
this.path
的值时,我的所有资源类都被命名为es
。所以AOT编译破坏了我的代码......如何解决这个问题(除了避免使用constructor.name
)?请注意,这只发生在-prod
标志上。 “正常”构建不会破坏它。
答案 0 :(得分:0)
在我看来,最简单的方法是添加一些重复。我的意思是 - 首先扩展您的资源接口:
interface IResourceConstructor<T extends IResource> {
new(...args: string[]): T;
path: string;
}
然后将新属性添加到具体类
class ConcreteResource implements IResource {
static path = 'ConcreteResource';
}
最后,您可以在函数中使用新属性:
this.path = `${toPluralDash(this.HostResource.path)}/$hostId/${toPluralDash(this.RelatedSource.path)}/$relatedId`;