6

在浏览器 prod/aot 模式下运行应用程序时获取消息。下面是我的 main-aot.ts

未捕获的 NullInjectorError:StaticInjectorError(平台:核心)[CompilerFactory]:NullInjectorError:没有 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)
});
4

5 回答 5

12

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

"postinstall": "ngcc"

然后运行它:

npm run postinstall

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

 platformBrowser().bootstrapModule(AppModule)
于 2020-06-27T02:38:02.930 回答
1

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

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

于 2020-10-13T07:09:41.227 回答
1

您可以尝试删除或仅删除已安装ngcc的Angular库并运行. 这也可能解决此问题。postinstallnode_modulesnpm install

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

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

于 2021-06-12T18:20:21.623 回答
1

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

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

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

@Parliaments 安装后技巧应该有效。但只是想多解释一下。

于 2021-10-04T18:46:21.587 回答
1

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

platformBrowserDynamic()
  .bootstrapModule(AppModule)
  .catch(err => console.error(err));
于 2020-02-27T09:10:44.627 回答