1. Введение в Angular: история, версии и принципиальные отличия от AngularJS
Введение в Angular: история, версии и принципиальные отличия от AngularJS
Представьте, что вы приходите на новую работу и вам говорят: «Мы используем Angular». Вы киваете, открываете документацию — и видите что-то совершенно непохожее на тот Angular, о котором читали в старых туториалах. Контроллеры, scope, контроллеров и директив. Архитектура была революционной для своего времени, но с ростом приложений обнаружились серьёзные проблемы: производительность деградировала из-за механизма dirty checking, тестируемость оставляла желать лучшего, а мобильные устройства задыхались под нагрузкой.
Angular (Angular 2+) — это полностью переписанный фреймворк, выпущенный в 2016 году. Общего с AngularJS у него только название и компания-разработчик. Новый Angular написан на TypeScript, использует компонентную архитектуру, иерархическую систему Dependency Injection и реактивное программирование через RxJS. Это принципиально другой инструмент.
> Называть Angular 2+ «AngularJS» — всё равно что называть современный автомобиль «каретой» только потому, что оба перевозят людей.
Когда в вакансии пишут «Angular», имеют в виду Angular 2 и выше. AngularJS официально перешёл в режим долгосрочной поддержки и прекратил активное развитие в декабре 2021 года.
Хронология версий: что менялось и почему
Angular придерживается семантического версионирования и выпускает мажорные версии каждые шесть месяцев. Это не значит, что каждая версия ломает всё — команда Google строго следит за обратной совместимостью внутри мажорных версий и предоставляет инструменты миграции (ng update).
| Версия | Год | Ключевые изменения |
|--------|-----|-------------------|
| Angular 2 | 2016 | Полный переход на TypeScript, компоненты, DI |
| Angular 4 | 2017 | Улучшенный компилятор, уменьшение размера бандла |
| Angular 6–7 | 2018 | Angular Elements, CLI Workspaces, CDK |
| Angular 8–9 | 2019–2020 | Ivy-компилятор (по умолчанию с v9), Differential Loading |
| Angular 12–13 | 2021 | Удаление View Engine, улучшения CLI |
| Angular 14 | 2022 | Standalone Components (preview), Typed Forms |
| Angular 15 | 2022 | Standalone API стабилен, директивные композиции |
| Angular 16 | 2023 | Signals (developer preview), esbuild по умолчанию |
| Angular 17 | 2023 | Signals стабильны, новый синтаксис шаблонов (@if, @for) |
| Angular 18–19 | 2024 | Zoneless режим, улучшенный SSR, Signal-based inputs |
| Angular 20 | 2025 | Полная интеграция Signals, SignalStore, SSR/hydration |
Версии 3 не существует — команда пропустила её, чтобы синхронизировать номера пакетов в монорепозитории. Это единственный «пропуск» в истории Angular.
Революция Ivy: почему это важно для React-разработчика
До Angular 9 фреймворк использовал компилятор View Engine. Ivy — это новый движок рендеринга и компиляции, который изменил всё под капотом. Для вас как для разработчика это означает:
Меньший размер бандла. Ivy генерирует код, который лучше поддаётся tree-shaking — удалению неиспользуемого кода. Приложение на Angular 9+ весит значительно меньше, чем аналогичное на Angular 8.
Инкрементальная компиляция. Пересборка при разработке стала быстрее, потому что Ivy перекомпилирует только изменившиеся компоненты.
Улучшенная отладка. В консоли браузера появились читаемые сообщения об ошибках вместо криптографических стектрейсов.
Если вы видите в коде функции с префиксом ɵɵ (например, ɵɵelementStart), это внутренние инструкции Ivy — именно в них компилируются ваши шаблоны. Как показывает анализ внутренней механики Angular, Angular использует подход Incremental DOM: вместо создания виртуального дерева компилятор генерирует инструкции, которые напрямую создают и обновляют реальные DOM-узлы.
!Эволюция Angular: от AngularJS к современному Angular с Ivy и Signals
Signals: современная реактивность Angular
Начиная с Angular 16, фреймворк получил Signals — примитив реактивности, аналогичный сигналам в SolidJS или useState в React, но с принципиально другой моделью обновлений. Сигнал — это контейнер значения, который отслеживает, кто его читает, и уведомляет подписчиков при изменении.
Ключевое отличие от React: Angular автоматически отслеживает зависимости во время выполнения. Не нужно вручную указывать массив зависимостей — фреймворк сам знает, какие сигналы читает computed или effect.
Философия Angular: «batteries included»
React — это библиотека для рендеринга UI. Всё остальное (роутинг, управление состоянием, HTTP-клиент, формы) вы выбираете сами из экосистемы. Angular — это платформа: он включает всё необходимое для разработки enterprise-приложений из коробки.
Это принципиальная разница в философии. Как отмечают практики из AngularUX:
> At 2 a.m., governance beats cleverness. Angular's defaults turn reliability into muscle memory. > > angularux.com
Когда в три часа ночи падает продакшн, вам не нужно вспоминать, какую библиотеку для форм выбрала команда полгода назад. В Angular ответ всегда один: Reactive Forms. Роутинг — Angular Router. HTTP — HttpClient. Это снижает когнитивную нагрузку и ускоряет онбординг новых разработчиков.
Первый проект: Angular CLI
Установка и создание проекта занимают три команды:
CLI задаст несколько вопросов: нужна ли маршрутизация (почти всегда yes) и какой препроцессор стилей использовать. После этого вы получите полностью настроенный проект с TypeScript, ESLint, тестами и сборкой через esbuild.
Структура проекта выглядит так:
Обратите внимание: в современном Angular (17+) нет AppModule по умолчанию — проект создаётся в режиме standalone components, о котором подробно поговорим в статье 11.
Ключевые команды CLI, которые нужно знать сразу
CLI — это не просто генератор файлов. Он управляет зависимостями, применяет schematics (скрипты миграции) при обновлении версий и интегрируется с системами сборки. Для React-разработчика аналогом является Create React App или Vite, но Angular CLI значительно мощнее и охватывает весь жизненный цикл разработки.
Почему Angular выбирают для enterprise
Согласно данным relevant.software, более 26% профессиональных разработчиков называют Angular своим основным веб-фреймворком. Крупные компании — Upwork, PayPal, Deutsche Bank — строят на нём критически важные системы. Причины:
Строгая типизация. TypeScript не опционален в Angular — он встроен в ДНК фреймворка. Это означает, что ошибки типов ловятся на этапе компиляции, а не в продакшне.
Предсказуемая архитектура. Когда в команде 20 разработчиков, важно, чтобы все писали код одинаково. Angular навязывает структуру — это не ограничение, а защита от хаоса.
Долгосрочная поддержка. Google использует Angular во внутренних продуктах (Google Cloud Console, Google Ads). Это гарантирует, что фреймворк не будет заброшен.
Инструменты миграции. Переход с Angular 12 на Angular 20 — это ng update, а не переписывание приложения с нуля.
Для React-разработчика переход на Angular — это не просто изучение нового синтаксиса. Это смена парадигмы: от «выбери сам» к «лучшая практика уже встроена». В следующей статье разберём, как именно эти парадигмы различаются на уровне архитектуры.