Библиотека Angular, которая используется другим приложением, выдает ошибку: вызовы функций не поддерживаются в декораторах, но был вызван «LoggerModule» - PullRequest
0 голосов
/ 21 октября 2018

Я написал угловую библиотеку с некоторыми службами, чтобы использовать ее в различных угловых приложениях.Все отлично работает без --prod, поэтому без компиляции AOT в угловом приложении.

Генерация библиотеки с помощью ng-packagr, а также с cli и некоторыми другими генераторами yeoman выдает каждый раз одну и ту же ошибку,Кроме того, я пробовал разные ng-версии (5.xx, 6.xx и 7.xx).Но во всех случаях каждый раз (с AOT) одна и та же ошибка, когда я вызываю LoggerModule.forRoot () в app.module приложения:

ERROR in Error during template compile of 'AppModule' 
Function calls are not supported in decorators but 'LoggerModule' was called.

Я читал много статей на эту тему, пробовал разные angularCompilerOptions вTSconfig.Есть еще какие-нибудь идеи?Модуль отлично работает без AOT (но это не вариант для нас) ...

NgМодуль библиотеки:

@NgModule({
  declarations: [],
  imports: [],
  providers: []
})
export class LoggerModule {

  static forRoot(): ModuleWithProviders {
    return {
        ngModule: LoggerModule,
        providers: [LoggerService]
    }
  }
}

NgМодуль приложения:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    LoggerModule.forRoot()
  ],
  providers: [],
  bootstrap: [AppComponent],
  entryComponents: [AppComponent]
})
export class AppModule {
}

1 Ответ

0 голосов
/ 22 октября 2018

Объявите ваш forRoot вне определения вашего модуля:

import { ModuleWithProviders } from ‘@angular/core’;
export const forRoot: ModuleWithProviders = LoggerModule.forRoot();

@NgModule({
   declarations: [
      AppComponent
   ],
   imports: [
        BrowserModule,
       AppRoutingModule,
       forRoot
   ],
   providers: [],
   bootstrap: [AppComponent],
   entryComponents: [AppComponent]
})
export class AppModule {
}
...