Angular Build Error: JIT compiler unavailable

94 阅读1分钟

这个错误通常出现在 Angular 项目生产环境下,原因是生产环境默认使用 AOT(Ahead-of-Time)编译,而不是 JIT(Just-In-Time)编译。JIT 编译器在生产包中不会被包含,如果代码或依赖在运行时还在尝试用 JIT 编译,就会报这个错。

可能原因

  1. 某些第三方库或懒加载模块在生产环境下还在用 JIT 编译。
  2. 在生产环境下用 platformBrowserDynamic().bootstrapModule(AppModule) 启动应用,而不是 platformBrowser().bootstrapModuleFactory(AppModuleNgFactory)。
  3. 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。