Angular中Webpack、Ivy、AOT与JIT的关系及默认编译配置疑问
核心问题解答
1. Webpack与JIT、AOT、Ivy的技术层级关系
核心结论:Webpack与三者不存在包含关系,属于完全不同技术栈层级,仅在构建流程中形成调用依赖
- Webpack是通用前端构建工具,本身不内置任何Angular专属的编译能力,仅负责模块依赖梳理、构建流程调度、产物打包等通用能力。Angular项目中的Angular专属编译动作,全部由Webpack加载的
@ngtools/webpack插件触发,实际编译逻辑完全来自Angular官方编译器,Webpack只做流程调用,不持有任何JIT/AOT/Ivy的实现代码。 - JIT、AOT是Angular编译器提供的两种编译时机选项:JIT指运行时在浏览器端完成组件模板编译,AOT指构建阶段提前完成模板编译转换,两种模式的逻辑全部归属Angular编译器本身,和Webpack无归属关系。
- Ivy是Angular推出的新一代视图渲染与编译引擎,用于替代旧版View Engine,是编译输出的底层实现载体。它独立于编译时机选型,既可以搭配AOT使用,也可以搭配JIT使用,全部实现逻辑属于Angular运行时与编译器范畴,不属于Webpack。
层级链路梳理:Angular(提供JIT/AOT模式切换、Ivy/旧VE引擎选型的核心编译能力) → 通过Webpack插件接入构建流程 → 由Webpack调度完成代码打包,最终产出运行产物。
2. Angular 9及之后的默认编译配置
核心结论:Angular 9起全场景默认配置为「Ivy视图引擎 + AOT编译模式」
- 你记忆中“JIT为默认编译模式”的官方表述,对应的是Angular 8及更早的版本:这类版本的开发服务器(
ng serve)为了加快启动速度,默认开启JIT模式,生产构建默认开启AOT模式,但这类版本的默认视图引擎是旧版View Engine,Ivy仅作为预览功能需要手动开启。 - 从Angular 9正式版开始,Ivy被确定为默认视图引擎,同时AOT被设为全场景默认编译模式——哪怕是本地开发启动的场景,也会默认走AOT编译流程。如果需要手动切换到JIT模式,需要在
angular.json中为对应构建目标显式设置"aot": false,但该配置目前仅推荐用于特殊调试场景,官方不建议日常开发使用。
内容的提问来源于stack exchange,提问作者Ahmed Rabie
相关产品推荐
相关产品推荐

