После создания рабочей версии моего приложения Angular 5 с ng build --prod
и его локального тестирования я столкнулся со следующей проблемой, см. Изображение ниже.
Что-то делает вызов /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
.«нормальная» сборка не нарушает его.