Angular CLI build minification破坏了我的应用程序

时间:2018-05-30 15:17:02

标签: angular-cli angular-aot

使用ng build --prod构建我的Angular 5应用程序的生产版本并在本地测试后,我遇到以下问题,请参见下图。

enter image description here

有人打电话给/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标志上。 “正常”构建不会破坏它。

1 个答案:

答案 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`;