我正在编写一个需要包装angular-oauth2-oidc的库。
Everything(库和消费者应用程序)编译得很好,但是在浏览器的运行时我得到以下错误:
ERROR Error: StaticInjectorError[InjectionToken DocumentToken]:
StaticInjectorError[InjectionToken DocumentToken]:
NullInjectorError: No provider for InjectionToken DocumentToken!
at _NullInjector.get (core.js:993)
at resolveToken (core.js:1281)
at tryResolveToken (core.js:1223)
at StaticInjector.get (core.js:1094)
at resolveToken (core.js:1281)
at tryResolveToken (core.js:1223)
at StaticInjector.get (core.js:1094)
at resolveNgModuleDep (core.js:10878)
at _createClass (core.js:10919)
at _createProviderInstance$1 (core.js:10889)
缩写代码:
图书馆模块:为我的图书馆定义NgModule
,导入OAuthModule
和所需的HttpClientModule
。定义我的SomeService
服务。
@NgModule({
imports: [ HttpClientModule, OAuthModule.forRoot() ],
providers: [ SomeService ]
})
export class SomeModule {}
图书馆服务:最低示例,除了实例化OAuth服务外什么都不做。
@Injectable()
export class SomeService {
constructor(private oauth: OAuthService) {}
}
消费者应用模块:只需将我的库导入为SomeModule
。
@NgModule({
...
imports: [ SomeModule ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
消费者组件:尝试调用我的库中的SomeService
服务,会产生错误。
@Component({ ... })
export class AppComponent {
constructor(
private someService: SomeService
) {}
}
HttpClientModule
,则表示我缺少HttpClient
而不是上面的错误@angular/cli
我尝试过很多东西,比如......
OAuthModule
.forRoot()
上的OAuthModule.forRoot()
表示图书馆无法访问OAuthModule
内的服务.forRoot()
,几乎包含providers
数组中的每个服务组合(在它自身之间,OAuthService和HttpClientService)。谷歌搜索,似乎这个错误可能发生在他们的NgModule上的供应商数组中缺少明显的东西时;这似乎不适用于我。我不在任何地方使用“ DocumentToken ”。
我也看到一个常见的修复方法是导入HttpClientModule
,我已经做过这件事无济于事。
我发现其他人的一个实例正在使用“DocumentToken”收到此错误。他们在this commit中修复了他们的库,这似乎只是为他们的汇总配置添加了更多的外部。虽然我的库使用webpack,但它使用webpack-angular-externals来确保所有@ angular / *包都列为外部。
非常感谢任何帮助或想法。
(Angular 5,TypeScript 2.6.2)