Home » Руководство по Angular CLI
Руководство по Angular CLI

Руководство по Angular CLI

Если ты админ, который разворачивает Angular-приложения на серверах, то Angular CLI — это твой главный друг. Эта штука не только упрощает разработку, но и делает деплой максимально предсказуемым. Сегодня разберём, как правильно настроить окружение, автоматизировать сборку и не наступить на грабли при развёртывании на VPS или выделенном сервере.

🔧 Как это работает под капотом

Angular CLI работает как обёртка над webpack, но с кучей предустановок и автоматизации. Основные компоненты:

  • Webpack 5 — bundler, который собирает всё в кучу
  • TypeScript компилятор — превращает TS в JS
  • Sass/Less процессор — для стилей
  • Karma + Jasmine — для тестов
  • Protractor/Cypress — для e2e тестов
  • Tree-shaking — выкидывает неиспользуемый код

Вся магия происходит через angular.json, который является центральным конфигом проекта. CLI считывает этот файл и понимает, как собирать, тестировать и деплоить приложение.

📦 Быстрая установка и настройка

Начнём с нуля. Сначала ставим Node.js (минимум 14.15.0, рекомендую 16+):

# Проверяем версию Node.js
node --version

# Устанавливаем Angular CLI глобально
npm install -g @angular/cli

# Проверяем установку
ng version

# Создаём новый проект
ng new my-app --routing --style=scss

# Переходим в папку проекта
cd my-app

# Запускаем dev-сервер
ng serve

Для продакшена добавляем несколько полезных пакетов:

# Для работы с окружениями
npm install --save-dev dotenv

# Для анализа бандла
npm install --save-dev webpack-bundle-analyzer

# Для прогрессивного веб-приложения
ng add @angular/pwa

🚀 Основные команды для админов

Вот команды, которые ты будешь использовать постоянно:

# Сборка для разработки
ng build

# Сборка для продакшена (минификация + оптимизация)
ng build --prod

# Сборка с анализом бандла
ng build --prod --stats-json
npx webpack-bundle-analyzer dist/my-app/stats.json

# Линтинг кода
ng lint

# Запуск тестов
ng test --watch=false --browsers=ChromeHeadless

# E2E тесты
ng e2e

# Обновление Angular
ng update @angular/core @angular/cli

# Генерация компонентов
ng generate component my-component
ng generate service my-service
ng generate module my-module

⚙️ Настройка окружений

Создаём файлы окружений в src/environments/:

// environment.prod.ts
export const environment = {
  production: true,
  apiUrl: 'https://api.myapp.com',
  version: '1.0.0'
};

// environment.staging.ts
export const environment = {
  production: false,
  apiUrl: 'https://staging-api.myapp.com',
  version: '1.0.0-staging'
};

Регистрируем в angular.json:

"configurations": {
  "production": {
    "fileReplacements": [
      {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.prod.ts"
      }
    ]
  },
  "staging": {
    "fileReplacements": [
      {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.staging.ts"
      }
    ]
  }
}

🎯 Оптимизация для продакшена

Параметр Описание Команда
AOT компиляция Ahead-of-Time компиляция ng build –aot
Tree-shaking Удаление неиспользуемого кода ng build –prod
Минификация Сжатие JS/CSS ng build –prod
Gzip сжатие Дополнительное сжатие ng build –prod –optimization
Lazy loading Подгрузка модулей по требованию ng generate module –route

🔥 Полезные хаки и автоматизация

Создаём build.sh скрипт для автоматизации:

#!/bin/bash

# Очищаем старые сборки
rm -rf dist/

# Устанавливаем зависимости
npm ci

# Запускаем тесты
npm run test:headless

# Собираем для продакшена
ng build --prod --source-map=false

# Создаём архив для деплоя
tar -czf deploy.tar.gz dist/

echo "Build completed successfully!"

Добавляем в package.json:

"scripts": {
  "build:prod": "ng build --prod",
  "build:staging": "ng build --configuration=staging",
  "test:headless": "ng test --watch=false --browsers=ChromeHeadless",
  "bundle-report": "ng build --prod --stats-json && npx webpack-bundle-analyzer dist/my-app/stats.json"
}

📊 Сравнение с альтернативами

Решение Плюсы Минусы Подходит для
Angular CLI Из коробки, много автоматизации Менее гибкий, больше размер Корпоративные проекты
Webpack + custom Полный контроль, гибкость Много настроек, время на конфиг Опытные команды
Vite Быстрая сборка, HMR Новый, меньше плагинов Небольшие проекты
Nx Монорепозитории, кеширование Сложность настройки Большие организации

🐛 Типичные проблемы и их решения

Проблема: Медленная сборка на больших проектах

Решение:

# Включаем инкрементальную сборку
ng build --watch

# Или настраиваем кеширование в angular.json
"cli": {
  "cache": {
    "enabled": true,
    "path": ".angular/cache"
  }
}

Проблема: Большой размер бандла

Решение:

# Анализируем бандл
ng build --prod --stats-json
npx webpack-bundle-analyzer dist/my-app/stats.json

# Включаем lazy loading для модулей
ng generate module feature --route feature --module app.module

Проблема: Ошибки TypeScript при сборке

Решение:

# Пропускаем проверку типов (не рекомендуется для прода)
ng build --prod --skip-type-check

# Или настраиваем tsconfig.json более строго
{
  "compilerOptions": {
    "strict": true,
    "noImplicitAny": true
  }
}

🎨 Интересные возможности

Schematics — создание собственных генераторов кода:

# Создаём свою коллекцию schematics
npm install -g @angular-devkit/schematics-cli
schematics blank --name my-schematics

# Генерируем компонент со своим шаблоном
ng generate my-schematics:component

Builders — кастомные задачи сборки:

# Создаём кастомный builder
ng generate @angular-devkit/architect:builder my-builder

Интеграция с Docker:

# Dockerfile для Angular приложения
FROM node:16-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN ng build --prod

FROM nginx:alpine
COPY --from=builder /app/dist/my-app /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf

🔗 Полезные ссылки

📈 Статистика и факты

  • Angular CLI используется в 89% Angular проектов (по данным Stack Overflow Survey 2023)
  • Средний размер бандла Angular приложения — 130-250 KB (gzipped)
  • Time to Interactive можно снизить на 40% с правильной настройкой lazy loading
  • Angular CLI поддерживает более 50 официальных schematics

🎯 Заключение и рекомендации

Angular CLI — это не просто инструмент для разработчиков, это мощный инструмент для админов, который позволяет стандартизировать процесс сборки и деплоя. Особенно полезен для:

  • Корпоративных проектов — где важна стабильность и предсказуемость
  • CI/CD пайплайнов — благодаря консистентным командам
  • Командной работы — единые стандарты для всех
  • Автоматизации — легко интегрируется в скрипты

Не забывай про мониторинг производительности и регулярное обновление зависимостей. Angular CLI регулярно обновляется, и каждая версия приносит новые оптимизации.

Для деплоя рекомендую использовать контейнеризацию с Docker и настроить nginx для отдачи статики. Это даст максимальную производительность и гибкость в настройке.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked