我曾经遇到过同样的问题。我的库是一个独立的项目,我的应用程序也是一个独立的项目,作为我的库的消费者。
库项目中的文件
lib.module
import { NgModule, ModuleWithProviders } from '';
import { ViclibTestComponent } from './viclib-test.component';
import { Config } from './config';
import { ViclibTestService } from './viclib-test.service';
@NgModule({
imports: [
],
declarations: [ViclibTestComponent],
providers: [ViclibTestService ],
exports: [ViclibTestComponent]
})
export class ViclibTestModule {
static forRoot(config: Config) : ModuleWithProviders {
return {
ngModule: ViclibTestModule,
providers: [{provide: 'config', useValue: config}] ,
};
}
}
Config接口config.ts
export interface Config {
key?: string;
}
ViclibTestService使用Config接口,viclib-test.service.ts文件
import { Injectable, Inject } from '';
import { Config} from './config';
@Injectable({
providedIn: 'root'
})
export class ViclibTestService {
constructor(@Inject('config') private config: Config) {
console.log("The config in service constructor: ", config);
console.log("config.key: ", config.key);
}
}
以上文件只是涉及到此事的相关文件。
这些文件现在在应用程序项目中,即消费者。
AppModule 中的 "error" 在 app.module.ts 文件中。
import { BrowserModule } from '';
import { NgModule } from '';
import { AppComponent } from './app.component';
import { ViclibTestModule } from 'viclib-test';
const config = {key: 'My beutiful key'};
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ViclibTestModule.forRoot(config)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
}
解决方法
由于某些原因,我不得不在 app.module.ts 文件中的 AppModule 中像这样提供程序。
import { BrowserModule } from '';
import { NgModule } from '';
import { AppComponent } from './app.component';
import { ViclibTestModule } from 'viclib-test';
const config = {key: 'My beutiful key'};
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ViclibTestModule.forRoot(config)
],
providers: [{provide: 'config', useValue: config}],
bootstrap: [AppComponent]
})
export class AppModule {
}
现在我可以使用 ng build --prod、ng serve --prod 和 ng serve,没有任何问题。
我正在使用 angular 6,其中包括现在的 ng-packagr 模块来生成库。我想这个库并没有完全分离,因为消费者必须提供我的库所需的提供程序。如果我错了,请纠正我或给我您的想法。
cli
相关的。你确定已经更新到了最新版本的cli
和angular
吗? - Poul Kruijtcli
版本1.5.2
和angular
版本5.0.0
。 - MrFohnode_modules
文件夹并重新安装。 - Poul Kruijtnode_modules
并升级所有内容解决了问题。 - MrFoh