我在Angular 2中构建了一个应用程序,并遇到了一个问题。
我使用angular CLI来创建我的应用程序,我使用Angular CLI创建了我的组件和服务,并使用“ ng serve ”在本地运行应用程序,一切正常。为了创建PROD的构建我使用命令“ ng build --Prod --base-href ./ --aot ”,它创建一个DIST文件夹并在IIS中托管该文件夹打开应用程序很好。当我将代码签入TFS时,有一个事件会使用jenkins自动创建DIST文件夹并将构建推送到我的服务器。现在,如果我浏览服务器的应用程序,它会抛出以下错误“没有提供商!”和错误:DI错误。我不知道我在这里做错了什么。
以下是错误的屏幕截图
非常感谢任何帮助。
答案 0 :(得分:11)
我遇到了同样的问题。我能够通过以下方式解决它:
ng serve -aot
。我能够找到丢失的类是什么,因为这是运行AOT而不运行minify / uglify。 就我而言,我在使用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!