Angular 9:NullInjectorError:没有 CompilerFactory 的提供者

Posted

技术标签:

【中文标题】Angular 9:NullInjectorError:没有 CompilerFactory 的提供者【英文标题】:Angular 9 : NullInjectorError: No provider for CompilerFactory 【发布时间】:2020-06-04 03:03:48 【问题描述】:

在浏览器 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)
);

【问题讨论】:

你应该在 AOT 中引导 ModuleNgFactory 你试过重新运行npm install @Andrei-- Angular 9/ivy 不生成 NgFactory 文件。 @NathanToulbert - 是的,但在这种情况下会有什么帮助? 它可能不会(在你的情况下显然没有)但这始终是我处理此类问题的第一步。类似于关闭或拔出运行缓慢或无法正常工作的计算机。这是一个快速的步骤,不会有什么坏处,因为您只是重新安装已经安装的依赖项。但是,如果安装不正确或不完整(有时 npm 就是这种情况),它将为您节省大量时间和精力。 【参考方案1】:

我收到此错误是因为在启用 Ivy 时我没有运行 Angular 9 现在需要的 ``ngcc`。所以为了解决这个问题,我在 package.json 脚本中添加了以下内容:

"postinstall": "ngcc"

然后运行它:

npm run postinstall

此外,以下引导代码就足够了,启用 AOT 后不需要 platformBrowserDynamic:

 platformBrowser().bootstrapModule(AppModule)

【讨论】:

救了我的命 :)。非常感谢:) 仅供参考,使用 Angular 13,您不再需要这样做了。视图引擎不见了,所以没有什么需要编译了【参考方案2】:

在带有 ivy 的 angular 9 中,不再有 ngFactory 文件,你不再需要 main-aot.ts,只需要 main.ts

platformBrowserDynamic()
  .bootstrapModule(AppModule)
  .catch(err => console.error(err));

【讨论】:

【参考方案3】:

我最近在部署远程服务器后遇到了类似的错误:NullInjectorError: No provider for CompilerFactory!。我已经完成了一个自动构建,它使用 npm run build --prod 将其更改为 ng build --prod 构建 dist/ 为我工作!

请检查您的环境是否正在使用类似工具运行/构建应用程序。

【讨论】:

【参考方案4】:

您可以尝试删除 node_modules 或删除已安装的 Angular 库并运行 npm install,而不是将 ngcc 添加到您的 postinstall 脚本中。 这也可能解决此问题。

在我的特殊情况下,似乎发生的事情是其中一个依赖项是 Angular 库,它们被编译到 node_modules 的文件夹中。从 Angular 10 更新到 11 后,编译可能已被缓存,但应该重新编译。

因此,运行ngcc 或删除node_modules 并重新安装依赖项似乎都可以解决问题。

【讨论】:

【参考方案5】:

Edit 使用 Angular 13,视图引擎消失了,您将不再需要运行 ngcc。它应该可以工作。

有趣的是,角度兼容性编译器 (ngcc) 将在运行 cli 工具时在后台运行,但在直接使用构建工具时不会。

这意味着您可能会发现,当您执行ng build 时,它工作正常。但是,ng run build 或直接使用 Angular 的“架构师”工具和某种构建工具(如 Bazel),那么您将需要自己运行 ngcc 命令。

@Parliaments 安装后技巧应该可以工作。但只是想多解释一下。

【讨论】:

以上是关于Angular 9:NullInjectorError:没有 CompilerFactory 的提供者的主要内容,如果未能解决你的问题,请参考以下文章

关于 Angular 9 迁移的 Angular 生产问题

安装nodejs后无法安装@angular/cli@9.1.8

Angular 9 - ????????????????

Angular 9 - 删除 Angular Material Stepper 上的默认图标(创建)

未检测到匹配的服务人员 - Angular 9

升级到 9.0 和 angular 7 后修复 angular-redux/store