ng serve запускает локальный сервер разработки с hot reload, а ng build собирает приложение для production. Это два ключевых workflow команды Angular CLI: разработка и деплой.
Ключевые аспекты
ng serve — запускает dev-сервер на localhost:4200 с автоматической перезагрузкой при изменениях
ng build — компилирует приложение в папку dist/ для развёртывания на сервере
Hot reload — изменения в коде автоматически отображаются в браузере без перезагрузки страницы
Production build — флаг --configuration production включает оптимизации (minification, tree-shaking, AOT)
Source maps — в dev-режиме генерируются для отладки в DevTools
Плюсы
Быстрый цикл разработки благодаря hot reload
Production-сборка оптимизирована из коробки
Поддержка proxy для обхода CORS при разработке
Встроенная поддержка environments (dev, prod, staging)
Минусы
ng serve не подходит для production (только для разработки)
Первый запуск может быть медленным на больших проектах
Build-время увеличивается с ростом проекта
Частые ошибки на собеседованиях
Путают ng serve и ng build (serve — для разработки, build — для деплоя)
Забывают про флаг --configuration production при сборке
Не знают, что ng serve по умолчанию использует JIT-компиляцию, а ng build --prod — AOT
Не упоминают про hot reload и live reload
Введение и проблематика
Разработка Angular-приложения состоит из двух основных этапов: написание кода и его развёртывание. Для каждого этапа Angular CLI предоставляет специализированные команды.
ng serve — для разработки (быстрая обратная связь, hot reload). ng build — для production (оптимизированный бандл для деплоя).
Какую проблему решают?
ng serve: устраняет необходимость вручную перезапускать сервер после каждого изменения
ng build: создаёт оптимизированную сборку, готовую к развёртыванию на любом веб-сервере
ng serve — сервер разработки
Базовое использование
bash
ngserve# или сокращённоngs
По умолчанию приложение доступно по адресу http://localhost:4200.
Как работает
graphLR A[Изменение файла]--> B[Webpack обнаруживает] B --> C[Пересборка модуля] C --> D[Hot Module Replacement] D --> E[Браузер обновляется]
Angular CLI использует webpack-dev-server, который хранит бандл в памяти для максимальной скорости пересборки.
Полезные флаги ng serve
bash
# Указать портngserve--port3000# Открыть браузер автоматическиngserve--open# илиngserve-o# Указать хост (для доступа из сети)ngserve--host0.0.0.0# Использовать HTTPSngserve--ssl# Отключить hot reload (только live reload)ngserve--no-hmr# Использовать конфигурацию productionngserve--configurationproduction
Proxy для API-запросов
При разработке frontend и backend часто находятся на разных портах. Proxy помогает избежать CORS-проблем.
Теперь запросы на /api/* будут перенаправляться на http://localhost:3000/api/*.
ng build — сборка приложения
Базовое использование
bash
ngbuild# или сокращённоngb
Результат сборки
index.html
main.js
polyfills.js
runtime.js
styles.css
Development vs Production сборка
bash
ngbuild# или явноngbuild--configurationdevelopment
Без минификации
Source maps включены
Быстрее собирается
Больший размер бандла
⚠️
Начиная с Angular 12, ng build по умолчанию использует production-конфигурацию. Для dev-сборки явно укажите --configuration development.
Полезные флаги ng build
bash
# Указать output-директориюngbuild--output-path./my-dist# Очистить output перед сборкойngbuild--delete-output-path# Указать base href (для деплоя в подпапку)ngbuild--base-href/my-app/# Отключить source mapsngbuild--source-map=false# Анализ размера бандлаngbuild--stats-json
Конфигурации (environments)
Angular поддерживает разные конфигурации для разных окружений.
ng serve запускает dev-сервер с hot reload для разработки, бандл хранится в памяти. ng build создаёт файлы на диске для деплоя на production-сервер.
Q: Что такое AOT и JIT компиляция?
JIT (Just-in-Time) — компиляция шаблонов в браузере во время выполнения. AOT (Ahead-of-Time) — компиляция на этапе сборки, быстрее загрузка, меньше ошибок в runtime.
Q: Как развернуть Angular-приложение?
Выполнить ng build --configuration production, затем скопировать содержимое папки dist/ на веб-сервер (nginx, Apache, или статический хостинг).
Q: Что делает флаг --base-href?
Устанавливает базовый путь для приложения. Необходим при деплое в подпапку: ng build --base-href /my-app/.