Библиотека Angular 6 с forRoot и AOT - вызовы функций не поддерживаются в декораторах

Я пытаюсь включить пользовательскую библиотеку в свое приложение Angular, но у меня проблема с функцией библиотеки forRoot.

Я развернул свое приложение в качестве причины, поскольку я создал стартовый проект angular-cli и могу подтвердить ту же ошибку, что и там, с ng build --prod:

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

Версии lib

Угловой 6.1.10,

Угловой-cli 6.2.1,

@ angular-devkit / build-ng-packagr 0.8.5,


Библиотечный модуль

Метод библиотеки forRoot:

@NgModule({
  imports: [],
})
export class CustomLibModule {

  public static forRoot(key: string, options?: ConfigOptions, version = SupportedVersions.V3): ModuleWithProviders {
    return {
      ngModule: CustomLibModule,
      providers: [
        {provide: PUBLIC_KEY, useValue: key},
        {provide: OPTIONS, useValue: options},
        {provide: VERSION, useValue: version},
      ],
    };
  }
}

Параметры поставщика - это Angular InjectionToken, которые используются в библиотеке.


Код приложения

Приложение вызывает библиотеку следующим образом:

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    BrowserModule,
    CustomLibModule.forRoot(env.KEY), <-- This causes the error, where `CustomLibModule`, without forRoot, is valid.
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

env.KEY - это не более чем струна. Замена на '' тоже не работает.


Библиотека была создана с помощью следующего учебника как собрать библиотеку Angular 6 и находится в шаблоне Angular 6. Я не изменял ts-config.

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ],
    "paths": {
      "core": [
        "dist/custom-lib"
      ],
      "core/*": [
        "dist/custom-lib/*"
      ]
    }
  }
}

У меня была та же проблема, я исправил это: постарайтесь НЕ использовать бочки в своем модуле (импортируйте {xxx} из ./xxx/xxx.component.ts, а не из ./xxx/ и проверьте, использует ли ваш public_api 'xxx / index' вместо 'xxx /', потому что мой файл metada.json был неполным.

fsi 09.11.2018 21:29
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
3
1
840
0

Другие вопросы по теме