我试图在我的Angular应用程序中包含一个自定义库,但是该库的forRoot
函数存在问题。
由于我已经创建了一个启动程序angular-cli项目,并且可以使用ng build --prod
确认在那里发生的相同错误,因此我已经将我的应用程序推出了。
在“ AppModule”函数调用的模板编译期间发生错误时出现错误 装饰器中不支持,但调用了'CustomLibModule'。
库版本
角度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
只不过是一个字符串。用''
替换它也不起作用。
该库是使用以下教程how to build Angular 6 library创建的,位于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/*"
]
}
}
}