Angular2“没有t的提供者!”和未捕获(承诺):错误:DI错误

时间:2017-02-03 20:59:36

标签: angular httpserver angular2-aot

我在Angular 2中构建了一个应用程序,并遇到了一个问题。 我使用angular CLI来创建我的应用程序,我使用Angular CLI创建了我的组件和服务,并使用“ ng serve ”在本地运行应用程序,一切正常。为了创建PROD的构建我使用命令“ ng build --Prod --base-href ./ --aot ”,它创建一个DIST文件夹并在IIS中托管该文件夹打开应用程序很好。当我将代码签入TFS时,有一个事件会使用jenkins自动创建DIST文件夹并将构建推送到我的服务器。现在,如果我浏览服务器的应用程序,它会抛出以下错误“没有提供商!”和错误:DI错误。我不知道我在这里做错了什么。

以下是错误的屏幕截图

enter image description here

enter image description here


非常感谢任何帮助。

4 个答案:

答案 0 :(得分:11)

我遇到了同样的问题。我能够通过以下方式解决它:

  1. 正在运行ng serve -aot。我能够找到丢失的类是什么,因为这是运行AOT而不运行minify / uglify。
  2. 一旦我这样做,我就能够查看错误上下文,找出哪个组件有问题。
  3. 转到相关组件并开始删除构造函数中的引用(发生依赖项解析的位置。
  4. 就我而言,我在使用angular2-logger / core模块中的Logger类时遇到了问题。一旦我从构造函数中删除了引用并重新编译,它就像一个魅力。然后,我使用ng serve -prod进行了测试,以确认它也已修复。

    我发现的一件事是我必须明确杀死Angular CLI并重建。出于某种原因,当我修改一行并保存时,它说它重新编译并且仍然被破坏。只有当我杀了它并再次运行命令时,我才发现它确实是固定的。

答案 1 :(得分:0)

我遇到了同样的问题,原因结果是angular2-logger库中的怪癖。  This answer为我解决了这个问题

答案 2 :(得分:0)

修复了! 在我的情况下,这是因为 angular2-notifications NotificationService

解决方案只是从 app module 中的providers数组中删除 NotificationService

但是仍然应该在AOT模式下通过角度进行验证。

谢谢!

答案 3 :(得分:0)

这是确定错误的一种方法 - 首先禁用uglify插件(自动设置为生产) - 并且无法使用angular-cli执行此操作。可以通过在node_modules目录中搜索UglifyJSPlugin来临时注释掉它。找到它后(在common.js文件中),将其注释掉

/*              
// Temporarily comment out this part (in common.js of node_modules) to pinpoint the error
                new UglifyJSPlugin({
                    sourceMap: buildOptions.sourceMap,
                    parallel: true,
                    cache: true,
                    uglifyOptions,
                }),
              */

再次构建您的应用并运行。然后,像这样一个神秘的错误

Unhandled Promise rejection: StaticInjectorError(ne)[t -> t]: 
  StaticInjectorError(Platform: core)[t -> t]: 
    NullInjectorError: No provider for t! ; Zone: <root> ; Task: Promise.then ; Value: Error: StaticInjectorError(ne)[t -> t]: 
  StaticInjectorError(Platform: core)[t -> t]: 
    NullInjectorError: No provider for t!

变为

Unhandled Promise rejection: StaticInjectorError(AppModule)[TranslatorService -> Http]: 
  StaticInjectorError(Platform: core)[TranslatorService -> Http]: 
    NullInjectorError: No provider for Http! ; Zone: <root> ; Task: Promise.then ; Value: Error: StaticInjectorError(AppModule)[TranslatorService -> Http]: 
  StaticInjectorError(Platform: core)[TranslatorService -> Http]: 
    NullInjectorError: No provider for Http!