这个错误通常出现在 Angular 项目生产环境下,原因是生产环境默认使用 AOT(Ahead-of-Time)编译,而不是 JIT(Just-In-Time)编译。JIT 编译器在生产包中不会被包含,如果代码或依赖在运行时还在尝试用 JIT 编译,就会报这个错。
可能原因
- 某些第三方库或懒加载模块在生产环境下还在用 JIT 编译。
- 在生产环境下用 platformBrowserDynamic().bootstrapModule(AppModule) 启动应用,而不是 platformBrowser().bootstrapModuleFactory(AppModuleNgFactory)。
- Angular 13+ 默认只支持 AOT,JIT 只用于开发。
解决方法
检查 main.ts 启动方式
只需要如下写法,AOT 会自动生效
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err));
检查angular.json 构建配置
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true
}
}
检查是否有动态编译相关代码
- 不要在生产环境下用 Compiler 服务或 JitCompilerFactory。
- 不要用 @angular/platform-browser-dynamic 相关的动态编译 API。
检查第三方库
有些第三方库(比如动态生成组件的库)在生产环境下不兼容 AOT。确认依赖是否都支持 AOT。