关于 Angular 由 TypeScript 7 驱动的编译器的更新
Angular 开发团队正在引入一款新编译器"ngp",以提升性能并利用原生工具链。多年来,Angular 高度依赖 TypeScript,后者在框架的扩展中发挥了关键作用。然而,类似 TypeScript 7 的 Go 编译版本与 Angular 深度集成的编译器不兼容。为此,Angular 正将其编译过程与 TypeScript 编译器 API 解耦。团队正在构建一款专为 Angular 设计的新编译器,用于处理组件和模板。该新编译器将输出经过转换的 TypeScript 代码,供构建流水线使用。如今,许多框架已将代码生成与类型检查分离,并常采用 oxc 库。Oxc 是用 Rust 编写的原生工具链,用于 JavaScript 的解析与编译,为 Vite 等工具提供支持。新的 Angular 预处理器 ngp 旨在实现与原生工具链相媲美的性能提升。ngp 主要有两项任务:编译 Angular 装饰器,并促进模板表达式的类型检查。针对每个源文件,ngp 会生成两个输出文件:一个用于编译后的代码,另一个用于类型检查。目前,ngp 采用混合架构,前端使用 Rust,后端使用 TypeScript。Rust 前端基于 oxc 构建,负责解析代码并识别 Angular 构造;TypeScript 后端则执行编译任务并生成输出。ngp 已接近最小可行产品(MVP)阶段,计划于今年晚些时候发布实验版本。早期测试结果令人鼓舞,但只有在对整个构建流程进行基准测试后,才能得出确切的性能对比数据。新编译器也正在原型化,以支持 Angular 语言服务。类型检查行为方面可能会出现一些微小的破坏性变更。团队选择 Rust 和 oxc 而非 Go,是因为存在更完善的 JavaScript/TypeScript 工具链库。