角度9:NullInjectorError:没有CompilerFactory提供者

时间:2020-02-19 20:42:59

标签: angular angular-cli-v9

在浏览器Pro / 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 个答案:

答案 0 :(得分:1)

在带有常春藤的角度9中,不再有ngFactory文件,您不再需要main-aot.ts,只需要main.ts

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

答案 1 :(得分:1)

我收到此错误是因为启用常春藤时我没有像现在Angular 9那样运行``ngcc''。因此,为解决此问题,我在package.json脚本中添加了以下内容:

"postinstall": "ngcc"

然后运行它:

npm run postinstall

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

 platformBrowser().bootstrapModule(AppModule)

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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

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