Angular Blog | Medium на русском
Подписаться
Обновление компилятора Angular на базе TypeScript 7
Команда разработчиков Angular представляет новый компилятор "ngp" для повышения производительности и использования нативных инструментов. Долгие годы Angular в значительной степени полагался на TypeScript, который сыграл ключевую роль в масштабировании фреймворка. Однако версия TypeScript, скомпилированная на Go, такая как TypeScript 7, несовместима с глубоко интегрированным компилятором Angular. Чтобы решить эту проблему, Angular отделяет свой процесс компиляции от API компилятора TypeScript. Они создают новый, специфичный для Angular компилятор, который будет обрабатывать компоненты и шаблоны. Этот новый компилятор будет выдавать преобразованный код TypeScript, готовый для конвейера сборки. Многие фреймворки теперь отделяют генерацию кода от проверки типов и часто используют библиотеку oxc. Oxc, написанная на Rust, представляет собой нативный инструментарий для парсинга и компиляции JavaScript, который обеспечивает работу таких инструментов, как Vite. Новый Angular Preprocessor, ngp, призван достичь аналогичных преимуществ в производительности, как и нативные инструменты. Ngp выполняет две основные задачи: компиляцию декораторов Angular и проверку типов выражений в шаблонах. Он генерирует два выходных файла на исходный файл: один для скомпилированного кода и другой для проверки типов. В настоящее время ngp имеет гибридную архитектуру, используя Rust для фронтенда и TypeScript для бэкенда. Фронтенд на Rust, построенный с использованием oxc, парсит код и идентифицирует конструкции Angular. Бэкенд на TypeScript выполняет задачи компиляции и генерирует вывод. Ngp приближается к стадии минимально жизнеспособного продукта, а экспериментальные версии планируется выпустить позднее в этом году. Хотя раннее тестирование обнадеживает, окончательные сравнения производительности будут возможны только после тестирования полного процесса сборки. Новый компилятор также прототипируется для обеспечения работы службы языка Angular. Возможны незначительные обратные изменения, связанные с поведением проверки типов. Команда выбрала Rust и oxc вместо Go из-за наличия надежной библиотеки инструментария для JavaScript/TypeScript.