Угловая минификация CLI ломает мое приложение - PullRequest
0 голосов
/ 30 мая 2018

После создания рабочей версии моего приложения Angular 5 с ng build --prod и его локального тестирования я столкнулся со следующей проблемой, см. Изображение ниже.

enter image description here

Что-то делает вызов /es, что я точно не написал сам.

Я думаю, что это связано с минификацией / aot-компилятором.Вызов инициируется путем нажатия на маршрут, который запускает следующий код

  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 голосов
/ 16 июня 2018

На мой взгляд, самый простой способ - добавить дублирование.Я имею в виду - сначала расширите свои интерфейсы ресурсов:

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`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...