Angular 6 - «вызовы функций не поддерживаются в ошибках декораторов при сборке prod» - PullRequest
0 голосов
/ 11 июня 2018

В настоящее время я занимаюсь разработкой приложения Angular 6 и через некоторое время, когда я пытался создать сборку prod

ng build --prod

Я столкнулся с этой ошибкой ...

ERROR in src\app\app.module.ts(26,17): Error during template compile of 'AppModule'
  Function expressions are not supported in decorators in 'APP_ROOT_STATE'
    'APP_ROOT_STATE' references 'APP_ROOT_STATE'
      'APP_ROOT_STATE' contains the error at src\app\app.component.ts(20,16)
        Consider changing the function expression into an exported function.

После некоторых исследований у меня есть четкое представление о том, что это за ошибка и как ее исправить, но в то же время я нашел это утверждение в Угловой документации по AOT :

Начиная с версии 5, компилятор автоматически выполняет эту перезапись при создании файла .js.

Что это значит?Я получаю сообщение об ошибке выше, используя последние версии пакетов Angular и / или Angular Cli.

Должен ли я как-то включить это переписывание?Есть надежда на то, что AOT не будет перезаписывать все лямбды в метаданных?

Код, на который ссылается ошибка, такой ...

export const APP_ROOT_STATE = {
  name: 'app',
  abstract: true,
  views   : {
    header: { component: CoreUiAppHeaderComponent },
    footer: { component: CoreUiAppFooterComponent }
  },
  onEnter: onEnterStateBreadcrumbHelper(new AppBreadcrumbEntryModel('Home', 'default')),
  onExit: onExitStateBreadcrumbHelper(),
  resolve: [
    {
    token: '_appInitialization',
    deps: [AppBootstrapService],
    resolveFn: (bootstrapSvc) => bootstrapSvc.initApplication()
    }
  ]
};

Именно эта строка ...

resolveFn: (bootstrapSvc) => bootstrapSvc.initApplication()

Если я переписываю это как функцию и ссылаюсь на эту функцию, ошибка исчезнет.Как то так ...

bootstrapSvcinitApplicationFunction = function(bootstrapSvc) {
  bootstrapSvc.initApplication(); 
}
...
resolveFn: bootstrapSvcinitApplicationFunction

1 Ответ

0 голосов
/ 11 июня 2018

Скорее всего, угловой компилятор автоматически переписывает только те функции стрелок, которые используются в метаданных компонента (директивы, службы и т. Д.), Другими словами, поддерживаются только ограниченные местоположения.В вашем случае функция находится в каком-то другом объекте, поэтому компилятор не знает, переписать он или нет.

...