繁体   English   中英

Angular 9:NullInjectorError:CompilerFactory 没有提供者

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM