Angular 9:NullInjectorError:CompilerFactory 没有提供者

Rah*_*mar 5 angular angular-cli-v9

在浏览器 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)
});
Run Code Online (Sandbox Code Playgroud)

par*_*ent 5

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

"postinstall": "ngcc"
Run Code Online (Sandbox Code Playgroud)

然后运行它:

npm run postinstall
Run Code Online (Sandbox Code Playgroud)

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

 platformBrowser().bootstrapModule(AppModule)
Run Code Online (Sandbox Code Playgroud)


小智 1

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

platformBrowserDynamic()
  .bootstrapModule(AppModule)
  .catch(err => console.error(err));
Run Code Online (Sandbox Code Playgroud)