Я пытаюсь включить пользовательскую библиотеку в мое приложение Angular, но у меня проблема с функцией forRoot
библиотеки.
Я выкатил свое приложение в качестве причины, так как я создал стартовый проект angular-cli и могу подтвердить ту же ошибку, происходящую там, с ng build --prod
:
ОШИБКАОшибка во время компиляции шаблона «AppModule» Вызовы функций не поддерживаются в декораторах, но вызывается «CustomLibModule».
Lib версии
Angular 6.1.10
,
Angular-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/*"
]
}
}
}