Angular 到底有一个还是两个编译器?
Angular只有一个编译器:JIT与AOT是同一核心的不同运行模式
你说得太对了!Angular并没有两个独立的编译器——JIT(Just-in-Time)和AOT(Ahead-of-Time)只是同一个编译器核心的两种不同执行方式,本质上共享一套编译逻辑。
下面展开说说具体细节:
- 核心编译器是统一的:Angular的编译核心都来自
@angular/compiler这个包,不管是JIT还是AOT,它要完成的核心任务完全一致:解析你的组件模板、装饰器等Angular专属语法,将其转换成浏览器能直接执行的标准JavaScript代码。 - JIT:浏览器运行时编译:当你用
ng serve默认启动开发项目时,采用的就是JIT模式。此时浏览器会下载未编译的组件和模板代码,Angular编译器会在浏览器里实时完成编译工作,生成可执行的JS。这种模式的优势是开发体验好——修改代码后能快速重新编译刷新,适合开发阶段调试。 - AOT:构建阶段提前编译:AOT模式则是在本地构建过程中(比如执行
ng build --prod)就完成编译。编译器在你的开发机器上运行,提前把模板和组件转换成JS代码,最终打包的产物里已经是编译好的可执行代码,不需要浏览器再做编译工作。这能大幅提升应用的启动速度,也更适合生产环境部署。 - 为什么会有“两个编译器”的误解?:可能是因为JIT和AOT的触发时机、运行环境差异明显,而且在Angular的工具链中,它们的入口配置看起来像是分开的,但底层依赖的核心编译逻辑是完全相同的,只是执行阶段和目标场景不同而已。
内容的提问来源于stack exchange,提问作者Unknown developer
相关产品推荐
相关产品推荐

