"没有提供TranslateService"错误以某种方式连接到npm安装

时间:2017-06-26 15:22:11

标签: angular npm webpack jhipster yarnpkg

使用my Angular+Webpack+JHipster+yarn project我收到以下错误消息。然后我删除node_modules并运行' npm install`,它就消失了。然后我这样做,然后又回来了。怎么会?我不想那样做。错误中列出的TranslateService是由库提供的,而不是我自己的库,并且在我未编写的项目的three generated components中使用。

ERROR Error: No provider for TranslateService!
    at injectionError (vendor.dll.js:1659)
    at noProviderError (vendor.dll.js:1697)
    at ReflectiveInjector_._throwOrNull (vendor.dll.js:3198)
    at ReflectiveInjector_._getByKeyDefault (vendor.dll.js:3237)
    at ReflectiveInjector_._getByKey (vendor.dll.js:3169)
    at ReflectiveInjector_.get (vendor.dll.js:3038)
    at GreatBigExampleApplicationAppModuleInjector.get (ng:///GreatBigExampleApplicationAppModule/module.ngfactory.js:515)
    at GreatBigExampleApplicationAppModuleInjector.getInternal (ng:///GreatBigExampleApplicationAppModule/module.ngfactory.js:2452)
    at GreatBigExampleApplicationAppModuleInjector.NgModuleInjector.get (vendor.dll.js:4005)
    at resolveDep (vendor.dll.js:11467)

3 个答案:

答案 0 :(得分:4)

作为documented on ngx-translate's github

  

您必须在应用程序的根NgModule中导入TranslateModule.forRoot()。

<强> app.module.ts

@NgModule({
  imports: [
    //...
    TranslateModule.forRoot(),
  ],
  //...
})

或者,如果您使用的是SharedModule

  

如果您使用在多个其他要素模块中导入的SharedModule,则可以导出TranslateModule以确保不必在每个模块中导入它

@NgModule({
  exports: [
    //...
    TranslateModule,
  ],
  //...
})

答案 1 :(得分:1)

我不是百分之百确定它做了什么,但我删除了yarn.lock,更正了节点版本差异,更新了json,现在似乎已经修复了。我的node_modules有节点6.11.0,但我一直使用6.10.3来安装包和运行。

更新: 抓一点。问题又回来了。它是在更改node_modules /下的源文件后启动的。在完全重新安装所有节点模块后删除了目标/ ...之后删除yarn.lock后,它仍然在反转更改后... ...后检查主分支。最后,在重新安装所有节点模块之后,它再次运行。

我不知道发生了什么。

答案 2 :(得分:0)

或者您必须像这样在没有 SharedModule 的情况下直接导出 TranslateModule 中的 app.module.ts

import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';



@NgModule({
  declarations: [
    AppComponent,
    //..
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule,
    //..
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: httpTranslateLoader,
        deps: [HttpClient]
      }
    }),
  ],
  exports: [TranslateModule],
  providers: [Title, HttpClient, HttpClientModule],
  bootstrap: [AppComponent],
  schemas: [CUSTOM_ELEMENTS_SCHEMA]
})

// AOT compilation support
export function httpTranslateLoader(http: HttpClient):any {
  return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}