获取错误:StaticInjectorError [InjectionToken DocumentToken] | NullInjectorError:没有提供者为InjectionToken DocumentToken

时间:2018-05-09 05:49:07

标签: angular typescript webpack

我正在将我的应用从角2.1升级到角5.0.0。并收到此错误。

  

错误:StaticInjectorError [InjectionToken DocumentToken]:\ n   StaticInjectorError [InjectionToken DocumentToken]:\ n
  NullInjectorError:没有PullToken DocumentToken的提供者!\ n
  NullInjectorError:没有PullToken DocumentToken的提供者!\ n
  在_NullInjector.get   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:962:19)\n   在resolveToken   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:1250:24)\n   在tryResolveToken   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:1192:16)\n   在StaticInjector.get   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:1063:20)\n   在resolveToken   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:1250:24)\n   在tryResolveToken   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:1192:16)\n   在StaticInjector.get   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:1063:20)\n   在resolveNgModuleDep   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:10623:25)\n   在_callFactory   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:10693:32)\n   在_createProviderInstance $ 1   (/Users/temp/Documents/GitHub/sample-app/node_modules/@angular/core/bundles/core.umd.js:10637:26)”,

这不是一个Angular CLI应用程序,因此我在git上创建了一个repo,以便最小化问题的再现。请参阅以下link

请参阅README.md了解构建并提供应用。

使用webpack:3.11.0用于构建此应用程序。 无法理解这个问题。

2 个答案:

答案 0 :(得分:1)

此处的问题是您的服务器index.js包中包含@angular/core代码。这意味着当您运行代码时,您有两个不同的函数InjectionToken,它们创建两个不同的DocumentToken实例。

可能的解决方法是更改​​

中的externals选项

<强> webpack.config.json

export var serverConfig = {
  ...
  externals: includeClientPackages(
    /@angularclass|@angular|angular2-|.....
  ), 
  externals: angularExternals(),
... } ... export function angularExternals() { return function (context, request, callback) { if (request.startsWith('@angular/')) { return callback(null, { root: ['ng', request.replace(/^@angular//, '')], commonjs: request, commonjs2: request, amd: request }); } callback(); }; }

之后,index.js包不会包含来自@angular/core的重复代码,因此angular将能够成功解析依赖关系。

答案 1 :(得分:0)

从'@ angular / common / http'导入{HttpClientModule,HttpClient};

然后: 进口:[ HttpClientModule]

它将起作用