Я пытаюсь включить пользовательскую библиотеку в свое приложение 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 был неполным.