Статьи

Ultimate Angular CLI Справочное руководство

В этой статье мы рассмотрим, что такое Angular CLI, что он может сделать для вас, и как он выполняет некоторые свои магические действия за кулисами. Даже если вы уже используете Angular CLI, эта статья может послужить справочным материалом для лучшего понимания его внутренней работы.

Технически, вам не нужно использовать Angular CLI для разработки приложения Angular, но его многочисленные функции могут значительно улучшить качество вашего кода и сэкономить вам много времени в пути.

Предпочитаете изучать Angular с помощью пошагового видеокурса? Проверьте Learn Angular 5 на SitePoint Premium.

Угловой CLI на стенде

Это предварительная статья из 4 частей о том, как написать приложение Todo на Angular.

  1. Часть 0 — Ultimate Angular CLI Справочное руководство
  2. Часть 1. Подготовка и запуск нашей первой версии приложения Todo
  3. Часть 2. Создание отдельных компонентов для отображения списка задач и одной задачи
  4. Часть 3. Обновление сервиса Todo для связи с REST API
  5. Часть 4. Использование углового маршрутизатора для разрешения данных .

Немного истории

15 сентября 2016 года вышел Angular Final .

В то время как AngularJS 1.x ограничивался фреймворком, Angular превратилась в амбициозную платформу, которая позволяет разрабатывать быстрые и масштабируемые приложения для всех платформ, таких как веб, мобильная сеть, собственный мобильный и даже собственный рабочий стол.

С этим переходом на платформу инструменты стали более важными, чем когда-либо. Однако настройка и настройка инструментов не всегда проста. Чтобы разработчики Angular могли сосредоточиться на создании приложений с минимальным трением, команда Angular прилагает много усилий, чтобы предоставить разработчикам высококачественный набор инструментов для разработки.

Частью этого набора инструментов являются тесные интеграции с широким спектром IDE и редакторов. Другая часть этого набора инструментов — Angular CLI .

Итак, начнем!


2017.04.25: По состоянию на 24 марта вышла версия Angular CLI v1.0. Эта статья была обновлена, чтобы отразить последние изменения. Если вы хотите добавить последние возможности Angular CLI v1.0 в существующий проект Angular, созданный с использованием более ранней версии Angular CLI, ознакомьтесь с руководством по миграции Angular CLI v1.0 .

2017.02.17: С 9 февраля 2017 года команда ng deploy удалена из ядра Angular CLI. Узнайте больше здесь .

2017.01.27: по состоянию на 27 января 2017 г. официальная рекомендация — использовать имя AngularJS для любого выпуска 1.x и имя Angular для любого выпуска 2+. Эта статья была обновлена ​​в соответствии с официальными рекомендациями по брендингу .


Что такое угловой CLI?

Angular CLI — это интерфейс командной строки (CLI) для автоматизации вашего рабочего процесса разработки. Это позволяет вам:

  • создать новое приложение Angular
  • запустить сервер разработки с поддержкой LiveReload для предварительного просмотра приложения во время разработки
  • добавить функции в ваше существующее приложение Angular
  • запустить модульные тесты вашего приложения
  • запустить сквозные тесты вашего приложения (E2E)
  • Создайте свое приложение для развертывания в производство.

Прежде чем мы подробно рассмотрим каждое из вышеперечисленных, давайте сначала посмотрим, как можно установить Angular CLI.

Предпосылки

Прежде чем вы сможете использовать Angular CLI, в вашей системе должен быть установлен Node.js 6.9.0 и npm 3.0.0 или выше.

Вы можете скачать последнюю версию Node.js для вашей операционной системы и ознакомиться с последними инструкциями по установке на официальном веб-сайте Node.js.

Если у вас уже установлены Node.js и npm, вы можете проверить их версию, выполнив:

 $ node -v # => displays your Node.js version $ npm -v # => displays your npm version 

После установки Node.js вы можете использовать команду npm для установки TypeScript :

 $ npm install -g [email protected] 

Хотя TypeScript технически не является абсолютным требованием, он настоятельно рекомендуется командой разработчиков Angular, поэтому я рекомендую установить его, чтобы сделать работу с Angular максимально комфортной.

Теперь, когда у вас установлены Node.js и TypeScript, вы можете установить Angular CLI.

Установка углового CLI

Чтобы установить Angular CLI, запустите:

 $ npm install -g @angular/cli 

Это установит команду ng глобально в вашей системе.

Чтобы проверить, успешно ли завершена установка, вы можете запустить это:

 $ ng version 

Это отображает версию, которую вы установили:

 @angular/cli: 1.0.0 node: 6.10.0 os: darwin x64 

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

Создание нового углового приложения

Существует два способа создания нового приложения с использованием Angular CLI:

  • ng init : создать новое приложение в текущем каталоге
  • ng new : создайте новый каталог и запустите ng init внутри нового каталога.

Таким образом, ng new похож на ng init , за исключением того, что он также создает каталог для вас.

Предполагая, что вы еще не создали каталог, давайте используем ng new для создания нового проекта:

 $ ng new my-app 

За кулисами происходит следующее:

  • новый каталог my-app создан
  • все исходные файлы и каталоги для вашего нового приложения Angular создаются на основе указанного вами имени ( my-app ) и рекомендаций из официального руководства по стилю Angular
  • npm-зависимости установлены
  • TypeScript настроен для вас
  • юнит- тестер Karma настроен для вас
  • Сквозной тестовый фреймворк Protractor настроен для вас
  • создаются файлы среды с настройками по умолчанию.

Вы узнаете больше о каждом из этих аспектов в следующих разделах.

На данный момент у вас есть работающее приложение Angular, и ваш новый каталог my-app выглядит так:

 . ├── README.md ├── e2e │ ├── app.e2e-spec.ts │ ├── app.po.ts │ └── tsconfig.e2e.json ├── karma.conf.js ├── package.json ├── protractor.conf.js ├── src │ ├── app │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ └── app.module.ts │ ├── assets │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ ├── test.ts │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ └── typings.d.ts ├── tsconfig.json └── tslint.json 

Доступные Варианты

  • --dry-run : логическое значение, значение по умолчанию false , выполнить --dry-run запуск, чтобы изменения не записывались в файловую систему
  • --verbose : логическое, по умолчанию false
  • --link-cli : логическое, по умолчанию false , автоматически связывать пакет @angular/cli ( подробнее )
  • --skip-install : логическое, по умолчанию false , пропустить npm install
  • --skip-git : логическое, по умолчанию false , не инициализировать репозиторий git
  • --skip-tests : логическое, по умолчанию false , пропустить создание тестов
  • --skip-commit : логическое, по умолчанию false , пропустить фиксацию первого коммита git
  • --directory : строка, имя создаваемого каталога, по умолчанию оно совпадает с именем приложения
  • --source-dir : строка, значение по умолчанию 'src' , имя исходного каталога
  • --style : string, по умолчанию 'css' , используемый язык стилей ( 'css' , 'less' или 'scss' )
  • --prefix : строка, 'app' умолчанию, префикс, используемый при создании новых компонентов
  • --mobile : логическое, по умолчанию false , генерировать приложение Progressive Web App (см. раздел о будущих функциях )
  • --routing : логическое, по умолчанию false , добавить модуль с информацией о маршрутизации и импортировать его в основной модуль приложения
  • --inline-style : логическое, по умолчанию false , использовать встроенные стили при создании нового приложения
  • --inline-template : логическое, по умолчанию false , использовать встроенные шаблоны при создании нового приложения.

Запустите $ ng generate --help чтобы увидеть все доступные опции вашего локально установленного Angular CLI.

Давайте посмотрим, как вы можете запустить свое приложение, чтобы увидеть его в действии.

Запуск вашего приложения

Чтобы просмотреть новое приложение в браузере, перейдите в его каталог:

 $ cd my-app 

и запустить:

 $ ng serve 

запустить встроенный сервер разработки на порту 4200:

 ** NG Live Development Server is running on http://localhost:4200 ** Hash: 09fb2ad840c1472e5885 Time: 6230ms chunk {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 158 kB {4} [initial] [rendered] chunk {1} main.bundle.js, main.bundle.js.map (main) 3.62 kB {3} [initial] [rendered] chunk {2} styles.bundle.js, styles.bundle.js.map (styles) 9.77 kB {4} [initial] [rendered] chunk {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.37 MB [initial] [rendered] chunk {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered] webpack: Compiled successfully. 

Теперь вы можете перейти в ваш любимый браузер по адресу http: // localhost: 4200 /, чтобы увидеть ваше приложение в действии:

Angular CLI: снимок экрана приложения, запущенного в браузере, с текстом «приложение работает!»

За кулисами происходит следующее:

  1. Angular CLI загружает свою конфигурацию из .angular-cli.json
  2. Angular CLI запускает Webpack для сборки и объединения всего кода JavaScript и CSS
  3. Angular CLI запускает сервер разработки Webpack для предварительного просмотра результатов на localhost:4200 .

Обратите внимание, что команда ng serve не выходит и не возвращается в окно терминала после шага 3.

Вместо этого, поскольку он включает поддержку LiveReload, процесс активно следит за изменениями файлов в вашем каталоге src . При обнаружении изменения файла шаг 2 повторяется, и в ваш браузер отправляется уведомление, чтобы оно могло автоматически обновляться.

Чтобы остановить процесс и вернуться к вашему приглашению, нажмите ctrl-c .

Добавление функций в ваше угловое приложение

Вы можете использовать команду ng generate для добавления функций в существующее приложение:

  • ng generate class my-new-class : добавить класс в ваше приложение
  • ng generate component my-new-component : добавить компонент в ваше приложение
  • ng generate directive my-new-directive : добавить директиву в ваше приложение
  • ng generate enum my-new-enum : добавьте enum в ваше приложение
  • ng generate module my-new-module : добавить модуль в ваше приложение
  • ng generate pipe my-new-pipe : добавьте канал в ваше приложение
  • ng generate service my-new-service : добавить сервис в ваше приложение

Команда generate и различные подкоманды также имеют сокращенные обозначения, поэтому следующие команды похожи:

  • ng g cl my-new-class : добавьте класс в ваше приложение
  • ng gc my-new-component : добавьте компонент в ваше приложение
  • ng gd my-new-directive : добавить директиву в ваше приложение
  • ng ge my-new-enum : добавьте enum в ваше приложение
  • ng gm my-new-module : добавить модуль в ваше приложение
  • ng gp my-new-pipe : добавьте канал в ваше приложение
  • ng gs my-new-service : добавьте сервис в ваше приложение.

Каждая из различных подкоманд выполняет свою задачу и предлагает различные параметры и параметры.

Давайте посмотрим на каждого из них.

Добавление нового класса

Чтобы добавить класс с именем UserProfile , запустите:

 $ ng generate class user-profile installing component create src/app/user-profile.ts 

Angular CLI автоматически подстраивает буквенный регистр имени файла и имени класса для вас, поэтому следующие команды имеют одинаковый эффект:

 # All three commands are equivalent $ ng generate class user-profile $ ng generate class userProfile $ ng generate class UserProfile 

За кулисами происходит следующее:

  • создается файл src/app/user-profile.ts который экспортирует пустой класс с именем UserProfile

Доступные Варианты

  • --spec : логическое, по умолчанию false , генерировать файл спецификации с модульным тестом

Запустите $ ng generate --help чтобы увидеть все доступные опции вашего локально установленного Angular CLI.

Примеры:

 # Generate class 'UserProfile' $ ng generate class user-profile # Generate class 'UserProfile' with unit test $ ng generate class user-profile --spec 

Добавление нового компонента

Чтобы добавить компонент с селектором app-site-header , запустите:

 $ ng generate component site-header installing component create src/app/site-header/site-header.component.css create src/app/site-header/site-header.component.html create src/app/site-header/site-header.component.spec.ts create src/app/site-header/site-header.component.ts update src/app/app.module.ts 

Angular CLI автоматически подстраивает буквенный регистр имени файла и имени компонента и применяет префикс к селектору компонента, поэтому следующие команды имеют тот же эффект:

 # All three commands are equivalent $ ng generate component site-header $ ng generate component siteHeader $ ng generate component SiteHeader 

За кулисами происходит следующее:

  • каталог src/app/site-header создан
  • внутри этого каталога генерируются четыре файла:
    • файл CSS для стилей компонентов
    • HTML-файл для шаблона компонента
    • файл TypeScript с классом компонента с именем SiteHeaderComponent и селектором app-site-header
    • файл спецификации с образцом модульного теста для вашего нового компонента
  • SiteHeaderComponent добавляется как объявление в декоратор @NgModule ближайшего модуля, в данном случае AppModule в src/app/app.module.ts .

Доступные Варианты

  • --flat : логическое, по умолчанию false , генерировать файлы компонентов в src/app вместо src/app/site-header
  • --inline-template : логическое, по умолчанию false , использовать встроенный шаблон вместо отдельного файла HTML
  • --inline-style : логическое, по умолчанию false , использовать встроенные стили вместо отдельного файла CSS
  • --prefix : логическое, по умолчанию true , использовать префикс, указанный в .angular-cli.json в селекторе компонентов
  • --spec : логическое, по умолчанию true , генерировать файл спецификации с модульным тестом
  • --view-encapsulation : string, определяет стратегию инкапсуляции представления
  • --change-detection : строка, определяет стратегию обнаружения изменений.

Запустите $ ng generate --help чтобы увидеть все доступные опции вашего локально установленного Angular CLI.

Примеры:

 # Generate component 'site-header' $ ng generate component site-header # Generate component 'site-header' with inline template and inline styles $ ng generate component site-header --inline-template --inline-style 

Добавление новой директивы

Чтобы добавить директиву с селектором appAdminLink , запустите:

 $ ng generate directive admin-link installing directive create src/app/admin-link.directive.spec.ts create src/app/admin-link.directive.ts update src/app/app.module.ts 

Angular CLI автоматически подстраивает буквенный регистр имени файла и имени директивы для вас и применяет префикс к селектору директивы, поэтому следующие команды имеют тот же эффект:

 # All three commands are equivalent $ ng generate directive admin-link $ ng generate directive adminLink $ ng generate directive AdminLink 

За кулисами происходит следующее:

  • создается файл src/app/admin-link.directive.ts который экспортирует директиву с именем AdminLinkDirective с селектором appAdminLink
  • файл src/app/admin-link.directive.spec.ts создается с модульным тестом для директивы
  • AdminLinkDirective добавляется как объявление в декоратор @NgModule ближайшего модуля, в данном случае AppModule в src/app/app.module.ts .

Доступные Варианты

  • --flat : логическое, по умолчанию true , генерировать файлы директив в src/app вместо src/app/admin-link
  • --prefix : логическое, по умолчанию true , использовать префикс, указанный в .angular-cli.json в селекторе директив
  • --spec : логическое, по умолчанию true , генерировать файл спецификации с модульным тестом

Запустите $ ng generate --help чтобы увидеть все доступные опции вашего локально установленного Angular CLI.

Примеры:

 # Generate directive 'adminLink' $ ng generate directive admin-link # Generate directive 'adminLink' without unit test $ ng generate directive admin-link --spec=false 

Добавление нового перечисления

Чтобы добавить перечисление с именем Direction , запустите:

 $ ng generate enum direction installing enum create src/app/direction.enum.ts 

Angular CLI автоматически подстраивает буквенный регистр имени файла и имени перечисления, поэтому следующие команды имеют одинаковый эффект:

 # Both commands are equivalent $ ng generate enum direction $ ng generate enum Direction 

За кулисами происходит следующее:

  • создается файл src/app/direction.enum.ts который экспортирует перечисление с именем Direction

Доступные Варианты

Для этой команды нет параметров командной строки.

Добавление нового модуля

Чтобы добавить новый модуль в ваше приложение, запустите:

 $ ng generate module admin installing module create src/app/admin/admin.module.ts 

За кулисами происходит следующее:

  • каталог src/app/admin создан
  • модуль AdminModule создается внутри src/app/admin/admin.module.ts .

Обратите внимание, что модуль AdminModule не добавляется автоматически в основной модуль AppModule в src/app/app.module.ts . Вы можете импортировать модуль туда, где он вам нужен.

Чтобы импортировать новый модуль в другой модуль, вы можете указать его как импорт в определении @NgModule . Например:

 import { AdminModule } from './admin/admin.module'; @NgModule({ // ... imports: [ AdminModule ] }) export class AppModule { } 

Доступные Варианты

  • --routing : логическое, по умолчанию false , сгенерировать дополнительный модуль AdminRoutingModule только с информацией о маршрутизации и добавить его в качестве импорта в ваш новый модуль
  • --spec : логическое, по умолчанию false , добавить src/app/admin/admin.module.spec.ts с модульным тестом, который проверяет, существует ли модуль.

Запустите $ ng generate --help чтобы увидеть все доступные опции вашего локально установленного Angular CLI.

Примеры:

 # Add module 'admin' $ ng generate module admin # Add module 'admin' with additional module containing routing information $ ng generate module admin --routing 

Добавление новой трубы

Канал является угловым эквивалентом фильтра в AngularJS 1.x и позволяет преобразовывать отображаемое значение в шаблоне.

Чтобы добавить канал с именем convertToEuro , запустите:

 $ ng generate pipe convert-to-euro installing pipe create src/app/convert-to-euro.pipe.spec.ts create src/app/convert-to-euro.pipe.ts update src/app/app.module.ts 

Angular CLI автоматически подстраивает буквенный регистр имени файла и канала, поэтому следующие команды имеют одинаковый эффект:

 # All three commands are equivalent $ ng generate pipe convert-to-euro $ ng generate pipe convertToEuro $ ng generate pipe ConvertToEuro 

За кулисами происходит следующее:

  • создается файл src/app/convert-to-euro.pipe.ts который экспортирует класс канала с именем ConvertToEuroPipe
  • файл src/app/convert-to-euro.pipe.spec.ts создается с модульным тестом для канала
  • ConvertToEuroPipe добавляется как объявление в декоратор @NgModule ближайшего модуля, в данном случае AppModule в src/app/app.module.ts .

Доступные Варианты

  • --flat : логическое, по умолчанию true , генерировать файлы компонентов в src/app вместо src/app/site-header
  • --spec : логическое, по умолчанию true , генерировать файл спецификации с модульным тестом.

Запустите $ ng generate --help чтобы увидеть все доступные опции вашего локально установленного Angular CLI.

Примеры:

 # Generate pipe 'convertToEuro' with spec and in /src/app directory $ ng generate pipe convert-to-euro # Generate pipe 'convertToEuro' without spec and in /src/app/convert-to-euro directory $ ng generate pipe convert-to-euro --spec=false --flat=false 

Добавление нового сервиса

Чтобы добавить сервис с токеном BackendApiService зависимостей BackendApiService , выполните:

 $ ng generate service backend-api installing service create src/app/backend-api.service.spec.ts create src/app/backend-api.service.ts WARNING Service is generated but not provided, it must be provided to be used 

Angular CLI автоматически подстраивает буквенный регистр имени файла и канала, поэтому следующие команды имеют одинаковый эффект:

 # All three commands are equivalent $ ng generate service backend-api $ ng generate service backendApi $ ng generate service BackendApi 

За кулисами происходит следующее:

  • создается файл src/app/backend-api.service.ts который экспортирует класс службы с именем BackendApiService
  • файл src/app/backend-api.service.spec.ts создается с модульным тестом для вашей новой службы.

Обратите внимание на то, как Angular CLI предупреждает, что сервис генерируется, но еще нигде не предоставляется. Вы можете зарегистрировать сервис в качестве провайдера, добавив его в массив providers: [] где он вам нужен (например, в модуле или компоненте). Например:

 import { BackendApiService } from './backend-api.service'; @NgModule({ // ... providers: [BackendApiService], bootstrap: [AppComponent] }) 

Доступные Варианты

  • --flat : логическое, по умолчанию true , генерировать служебный файл в src/app вместо src/app/backend-api
  • --spec : логическое, по умолчанию true , генерировать файл спецификации с модульным тестом

Запустите $ ng generate --help чтобы увидеть все доступные опции вашего локально установленного Angular CLI.

Примеры:

 # Generate service with DI token 'BackendApiService' in /src/app directory $ ng generate service backend-api # Generate service with DI token 'BackendApiService' in /src/app/backend-api directory $ ng generate service backend-api --flat=false 

Специальная записка

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

Например, при добавлении нового компонента с использованием компонента ng generate component Angular CLI находит ближайший модуль в дереве модулей вашего приложения и интегрирует новую функцию в этот модуль.

Поэтому, если у вас есть приложение с несколькими модулями, Angular CLI автоматически интегрирует новую функцию в нужный модуль, в зависимости от каталога, из которого вы запускаете команду.

Запуск ваших юнит-тестов

Angular CLI автоматически настраивает тестер Karma для вас при первоначальном создании приложения.

При добавлении функции в ваше приложение вы можете использовать опцию --spec чтобы указать, хотите ли вы, чтобы Angular CLI также создавал соответствующий файл .spec.ts с образцом модульного теста для вашей новой функции.

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

Таким образом, выполнение всех модульных тестов вашего приложения подразумевает выполнение всех модульных тестов, указанных во всех файлах, заканчивающихся на .spec.ts во всех каталогах внутри вашего каталога src .

Для запуска всех модульных тестов выполните:

 $ ng test 

Следующий вывод появится в вашей консоли:

 $ ng test [karma]: No captured browser, open http://localhost:9876/ [karma]: Karma v1.4.1 server started at http://0.0.0.0:9876/ [launcher]: Launching browser Chrome with unlimited concurrency [launcher]: Starting browser Chrome [Chrome 57.0.2987 (Mac OS X 10.12.0)]: Connected on socket 4OBzlsVyIPZyE1AYAAAA with id 41455596 Chrome 57.0.2987 (Mac OS X 10.12.0): Executed 3 of 3 SUCCESS (0.132 secs / 0.121 secs) 

Также будет запущен специальный экземпляр браузера:

Угловой интерфейс: окно бега, тестирование кармы

Вот что происходит за кулисами:

  1. Угловой CLI загружает .angular-cli.json .
  2. Angular CLI запускает Karma с конфигурацией, указанной в .angular-cli.json . По умолчанию это karma.conf.js расположенный в корневом каталоге вашего приложения.
  3. Карма открывает браузер, указанный в конфигурации Кармы. По умолчанию в браузере установлен Google Chrome .
  4. Затем Karma инструктирует браузер (Chrome) запустить src/test.ts используя src/test.ts тестирования, указанную в конфигурации Karma. По умолчанию это фреймворк Jasmine . Файл src/test.ts автоматически создается при создании вашего приложения. Он предварительно настроен для загрузки и настройки кода, необходимого для тестирования вашего приложения Angular и запуска всех спецификационных файлов, заканчивающихся на .spec.ts в вашем каталоге src .
  5. Карма сообщает результат теста на консоль.
  6. Karma отслеживает изменения в файле src и повторяет шаги 4 и 5 при обнаружении изменения файла.

Чтобы завершить процесс, вы можете нажать ctrl-c .

Если вы хотите узнать больше о тестировании вашего Angular-кода, вы можете ознакомиться с Официальным руководством по Angular Testing .

Выполнение ваших сквозных (E2E) тестов

Angular CLI автоматически настраивает Protractor для вас при первоначальном создании приложения.

Чтобы запустить тесты E2E, запустите:

 $ ng e2e 

Следующий вывод появится в вашей консоли:

 ** NG Live Development Server is running on http://localhost:49152 ** Hash: e570d23ac26086496e1d Time: 6087ms chunk {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 158 kB {4} [initial] [rendered] chunk {1} main.bundle.js, main.bundle.js.map (main) 3.62 kB {3} [initial] [rendered] chunk {2} styles.bundle.js, styles.bundle.js.map (styles) 9.77 kB {4} [initial] [rendered] chunk {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.37 MB [initial] [rendered] chunk {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered] webpack: Compiled successfully. I/file_manager - creating folder /Users/jvandemo/Projects/test/my-app/node_modules/protractor/node_modules/webdriver-manager/selenium I/downloader - curl -o /Users/jvandemo/Projects/test/my-app/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.29.zip https://chromedriver.storage.googleapis.com/2.29/chromedriver_mac64.zip I/update - chromedriver: unzipping chromedriver_2.29.zip I/update - chromedriver: setting permissions to 0755 for /Users/jvandemo/Projects/test/my-app/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.29 I/launcher - Running 1 instances of WebDriver I/direct - Using ChromeDriver directly... Spec started my-app App ✓ should display message saying app works Executed 1 of 1 spec SUCCESS in 0.523 sec. I/launcher - 0 instance(s) of WebDriver still running I/launcher - chrome #01 passed 

Также будет запущен специальный экземпляр браузера:

Угловой CLI: окно браузера, показывающее «приложение работает!» Текст

Вот что происходит за кулисами:

  1. Угловой CLI загружает .angular-cli.json .
  2. Angular CLI запускает Protractor с конфигурацией, указанной в .angular-cli.json . По умолчанию это файл protractor.conf.js расположенный в корневом каталоге вашего приложения.
  3. Транспортир открывает браузер, указанный в конфигурации Транспортира. По умолчанию в браузере установлен Google Chrome .
  4. Затем Protractor инструктирует браузер (Chrome) запустить все файлы спецификаций, заканчивающиеся на .e2e-spec.ts в вашем e2e .
  5. Транспортир сообщает результат теста на консоль.

Процесс завершается автоматически после шага 5.

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

Создание вашего приложения для производства

Запуск ng serve автоматически строит и связывает ваше приложение Angular с виртуальной файловой системой во время разработки.

Однако, когда ваше приложение будет готово к работе, вам потребуются реальные файлы, которые вы можете развернуть на своем сервере или в облаке.

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

 $ ng build 

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

 Hash: 59aaa9ef8eac5d46cdf8 Time: 5433ms chunk {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 158 kB {4} [initial] [rendered] chunk {1} main.bundle.js, main.bundle.js.map (main) 3.61 kB {3} [initial] [rendered] chunk {2} styles.bundle.js, styles.bundle.js.map (styles) 9.77 kB {4} [initial] [rendered] chunk {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.07 MB [initial] [rendered] chunk {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered] 

Вот что происходит за кулисами:

  1. Angular CLI загружает свою конфигурацию из .angular-cli.json .
  2. Angular CLI запускает Webpack для сборки и связывания всего кода JavaScript и CSS.
  3. Результат записывается в каталог outDir указанный в вашей конфигурации Angular CLI. По умолчанию это каталог dist .

Доступные Варианты

  • --aot : включить --aot компиляцию
  • --base-href : строка, базовая ссылка для использования в индексном файле
  • --environment : строка, dev умолчанию, среда для использования
  • --output-path : строка, каталог для записи вывода в
  • --target : строка, development умолчанию, среда для использования
  • --watch : логическое, по умолчанию false , смотреть файлы на наличие изменений и перестраивать при обнаружении изменения.

Цели

Указание цели влияет на способ работы процесса сборки. Его значение может быть одним из следующих:

  • development : режим по умолчанию, не минимизируйте и не уменьшайте код
  • production : минимизировать и увеличить код.

Сборка приложения в производственном режиме:

 $ ng build --target=production 

Это приводит к пакетам, которые уменьшены, очищены и имеют хэши в своих именах:

 Hash: 4dea6adc9ac01de3c11b Time: 5588ms chunk {0} polyfills.2d45a4c73c85e24fe474.bundle.js (polyfills) 158 kB {4} [initial] [rendered] chunk {1} main.a64b48e56248eb808195.bundle.js (main) 20.8 kB {3} [initial] [rendered] chunk {2} styles.d41d8cd98f00b204e980.bundle.css (styles) 69 bytes {4} [initial] [rendered] chunk {3} vendor.205c7417e47c580a2c34.bundle.js (vendor) 1.1 MB [initial] [rendered] chunk {4} inline.310ccba0fff49a724c8f.bundle.js (inline) 0 bytes [entry] [rendered] 

Среды

Среды позволяют вам задавать настройки для настройки поведения вашего приложения.

Вы можете определить свои собственные среды в .angular-cli.json . По умолчанию:

  • source : используйте настройки, определенные в environments/environment.ts
  • dev : использовать настройки, определенные в environments/environment.ts
  • prod : использовать настройки, определенные в environments/environment.prod.ts .

Здесь environments/environment.ts равно:

 export const environment = { production: false }; 

И environments/environment.prod.ts равно:

 export const environment = { production: true }; 

Процесс сборки будет использовать среду dev по умолчанию.

Если вы укажете другую среду, процесс сборки будет использовать соответствующую среду:

 # Uses environments/environment.ts $ ng build # Also uses environments/environment.ts $ ng build --environment=dev # Uses environments/environment.prod.ts $ ng build --environment=prod 

Как вы можете видеть в src/main.ts , вы можете получить доступ к настройкам среды из своего кода, импортировав environments/environment :

 import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; if (environment.production) { enableProdMode(); } platformBrowserDynamic().bootstrapModule(AppModule); 

Процесс сборки обеспечит правильную среду при ее импорте.

Развертывание вашего приложения

С 9 февраля 2017 г. команда ng deploy удалена из ядра Angular CLI. Узнайте больше здесь .

Удаление вашего приложения

Начиная с версии 1.0 Angular CLI предоставляет команду для отделения вашего приложения от Angular CLI.

По умолчанию Angular CLI управляет базовой конфигурацией веб-пакета, поэтому вам не придется сталкиваться с ее сложностью.

Если в любой момент времени вы хотите вручную настроить Webpack и больше не хотите использовать Angular CLI с вашим приложением Angular, вы можете запустить:

 $ ng eject 

Это сгенерирует следующий вывод в вашей консоли:

 ========================================================================================== Ejection was successful. To run your builds, you now need to do the following commands: - "npm run build" to build. - "npm run test" to run unit tests. - "npm start" to serve the app using webpack-dev-server. - "npm run e2e" to run protractor. Running the equivalent CLI commands will result in an error. ========================================================================================== Some packages were added. Please run "npm install". 

Вот что происходит за кулисами:

  1. .angular-cli.json свойство ejected: true добавляется в файл .angular-cli.json
  2. Файл webpack.config.js создается в корне вашего приложения с автономной конфигурацией Webpack, поэтому вы можете создать свой проект без Angular CLI.
  3. Сценарий build в вашем package.json обновлен, поэтому вы можете запустить npm run build для сборки вашего проекта
  4. Сценарий test в вашем package.json обновлен, поэтому вы можете запустить npm run test или npm test чтобы запустить свои модульные тесты
  5. Сценарий start в вашем package.json обновлен, поэтому вы можете запустить npm run start или npm start для запуска сервера разработки
  6. Сценарий e2e в вашем package.json обновлен, поэтому вы можете запустить npm run e2e чтобы выполнить npm run e2e тесты.

После извлечения приложения вы можете вручную обновить конфигурацию Webpack, и команды Angular CLI больше не будут работать.

Так что, если по какой-то причине вы хотите отойти от Angular CLI, команда eject вас охватит.

Взгляд в будущее

Дорожная карта Angular CLI содержит много интересных новых функций:

  • поддержка прогрессивного веб-приложения (PWA)
    Angular CLI сможет создать для вас манифест веб-приложения, сгенерировать оболочку приложения и предоставить сценарии Service Worker для кэширования данных вашего приложения.
    Узнайте больше о мобильной поддержке здесь .
  • Поддержка рефакторинга
    Помимо добавления функций в ваше приложение, Angular CLI также позволит вам реорганизовать существующие функции — например, перемещение компонента или переименование службы.
  • Поддержка обновления
    Angular CLI сможет помочь вам с обновлениями Angular. Поскольку Angular CLI имеет семантическое понимание вашего приложения, он сможет помочь вам с изменениями кода, которые требуются при обновлении до более новой версии Angular.
  • растяжимость
    Улучшенная поддержка расширяемости, так что вы можете создавать свои собственные дополнения и сценарии развертывания.
  • Увеличение производительности
    Улучшена производительность, поэтому Angular CLI становится быстрее.
  • Режим разработчика библиотеки
    В дополнение к созданию нового приложения Angular CLI также позволит вам создать новую библиотеку, которая может использоваться другими.

Некоторые из этих функций уже частично доступны. Проверьте репозиторий GitHub, если вы хотите поиграть с ними.

Резюме

Angular CLI — это интерфейс командной строки (CLI) для автоматизации вашего рабочего процесса разработки.

Сегодня вы уже можете использовать Angular CLI для:

  • создать новое приложение Angular
  • запустить сервер разработки с поддержкой LiveReload для предварительного просмотра приложения во время разработки
  • добавить функции в ваше существующее приложение Angular
  • запустить модульные тесты вашего приложения
  • запустить сквозные тесты вашего приложения (E2E)
  • создать приложение для развертывания в производство
  • разверните свое приложение на сервере.

Хотя для разработки Angular-приложения технически не требуется использовать Angular CLI, он определенно может улучшить качество вашего кода и сэкономить вам много времени и усилий.

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

Чтобы узнать больше об Angular CLI, посетите официальный веб-сайт и репозиторий GitHub .

Справочник Ultimate Angular CLI был рецензирован Тимом Севериеном , Вилданом Софтиком и Джоан Инь . Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!