Angular 5 NullInjectorError: No provider for n

9

当我使用ng serve启动我的网站时,一切都很正常,但是每次尝试启动生产环境时都会出现错误NullInjectorError: No provider for n。我检查了所有我编写的服务是否包含在NgModule提供商中。因为这是生产环境,所有文件都被压缩和混淆,所以我不知道到底是什么导致了这个问题。有没有办法来检查它或者也许可以从错误详情中获取信息?

ERROR Error: StaticInjectorError(G)[n -> n]: 
StaticInjectorError(Platform: core)[n -> n]: 
NullInjectorError: No provider for n!
at n.get (main.94f42881e2fdceca85d7.bundle.js:1)
at main.94f42881e2fdceca85d7.bundle.js:1
at n (main.94f42881e2fdceca85d7.bundle.js:1)
at n.get (main.94f42881e2fdceca85d7.bundle.js:1)
at main.94f42881e2fdceca85d7.bundle.js:1
at n (main.94f42881e2fdceca85d7.bundle.js:1)
at n.get (main.94f42881e2fdceca85d7.bundle.js:1)
at Pi (main.94f42881e2fdceca85d7.bundle.js:1)
at main.94f42881e2fdceca85d7.bundle.js:1
at Li (main.94f42881e2fdceca85d7.bundle.js:1)
2个回答

21

这可能是由于JIT(即时编译)和AOT(提前编译)编译器的差异造成的。在文档中了解更多相关内容。

如果您运行ng serveng build,默认情况下将使用JIT。然而,使用--prod标志会采用AOT

尝试运行ng serve --aotng serve --prod以查看更易理解的错误消息。由于现在速度几乎没有变慢,因此我建议在开发过程中始终使用--aot标志。您将更早地发现问题。


太棒了,这正是我所需要的! - Igor

4

我曾经遇到过同样的问题,解决方法是在应用程序根模块中添加HttpClientModule到导入中。导致错误的原因是我在另一个模块中导入了它。

// app.module.ts
import { HttpClientModule } from '@angular/common/http';

@NgModule({
imports: [HttpClientModule]
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接