[英]Angular 9 : NullInjectorError: No provider for CompilerFactory
在浏览器 prod/aot 模式下运行应用程序时获取消息。 下面是我的 main-aot.ts
未捕获的 NullInjectorError: StaticInjectorError(Platform: core)[CompilerFactory]: NullInjectorError: No provider for CompilerFactory!
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { platformBrowser } from '@angular/platform-browser';
//import { AppModuleNgFactory } from './app/app.module.ngfactory';
import { AppModule } from './app/app.module';
enableProdMode();
// tslint:disable-next-line:no-console
/*platformBrowser().bootstrapModuleFactory(AppModuleNgFactory).catch(err => {
console.log('CANNOT LOAD AOT MODULE')
console.dir(AppModuleNgFactory);
console.error(err)
});*/
platformBrowser().bootstrapModule(AppModule).catch(err => {
console.log('CANNOT LOAD AOT MODULE')
console.dir(AppModule);
console.error(err)
});
我收到这个错误是因为当 Ivy 启用时,我没有像现在要求的 Angular 9 那样运行 ```ngcc``。 所以为了解决这个问题,我在 package.json 脚本中添加了以下内容:
"postinstall": "ngcc"
然后运行它:
npm run postinstall
此外,以下引导代码就足够了,启用 AOT 时不需要 platformBrowserDynamic:
platformBrowser().bootstrapModule(AppModule)
在带有 ivy 的 angular 9 中,不再有 ngFactory 文件,您不再需要 main-aot.ts,只需要 main.ts
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch(err => console.error(err));
您可以尝试删除node_modules
或仅删除已安装的 Angular 库并运行npm install
,而不是将ngcc
添加到您的postinstall
脚本中。 这也可能解决此问题。
在我的特殊情况下,似乎发生的情况是依赖项之一是 Angular 库,它们被编译到node_modules
的文件夹中。 从 Angular 10 更新到 11 后,该编译可能已缓存但应重新编译。
因此,运行ngcc
或删除node_modules
并重新安装依赖项似乎都可以解决问题。
使用 Angular 13 进行编辑,视图引擎消失了,您将不再需要运行ngcc
。 它应该可以正常工作。
有趣的是,角度兼容性编译器 (ngcc) 将在运行 cli 工具时在幕后运行,但在直接使用构建工具时不会。
这意味着您可能会发现,当您进行ng build
,它运行良好。 但是, ng run build
或直接使用 Angular 的“架构师”工具和 Bazel 等某种构建工具,那么您需要自己运行ngcc
命令。
@Parliaments 安装后技巧应该有效。 但只是想多解释一下。
我最近遇到了类似的错误: NullInjectorError: No provider for CompilerFactory!
在部署我的远程服务器之后。 我已经完成了一个自动构建,它正在构建dist/
使用npm run build --prod
将其更改为ng build --prod
对我ng build --prod
!
请检查您的环境是否正在使用类似的工具运行/构建应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.