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 的提供者的主要内容,如果未能解决你的问题,请参考以下文章
安装nodejs后无法安装@angular/cli@9.1.8