В этой статье мы рассмотрим, что такое Angular CLI, что он может сделать для вас, и как он выполняет некоторые свои магические действия за кулисами. Даже если вы уже используете Angular CLI, эта статья может послужить справочным материалом для лучшего понимания его внутренней работы.
Технически, вам не нужно использовать Angular CLI для разработки приложения Angular, но его многочисленные функции могут значительно улучшить качество вашего кода и сэкономить вам много времени в пути.
Предпочитаете изучать Angular с помощью пошагового видеокурса? Проверьте Learn Angular 5 на SitePoint Premium.
Это предварительная статья из 4 частей о том, как написать приложение Todo на Angular.
- Часть 0 — Ultimate Angular CLI Справочное руководство
- Часть 1. Подготовка и запуск нашей первой версии приложения Todo
- Часть 2. Создание отдельных компонентов для отображения списка задач и одной задачи
- Часть 3. Обновление сервиса Todo для связи с REST API
- Часть 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 загружает свою конфигурацию из
.angular-cli.json
- Angular CLI запускает Webpack для сборки и объединения всего кода JavaScript и CSS
- 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)
Также будет запущен специальный экземпляр браузера:
Вот что происходит за кулисами:
- Угловой CLI загружает
.angular-cli.json
. - Angular CLI запускает Karma с конфигурацией, указанной в
.angular-cli.json
. По умолчанию этоkarma.conf.js
расположенный в корневом каталоге вашего приложения. - Карма открывает браузер, указанный в конфигурации Кармы. По умолчанию в браузере установлен Google Chrome .
- Затем Karma инструктирует браузер (Chrome) запустить
src/test.ts
используяsrc/test.ts
тестирования, указанную в конфигурации Karma. По умолчанию это фреймворк Jasmine . Файлsrc/test.ts
автоматически создается при создании вашего приложения. Он предварительно настроен для загрузки и настройки кода, необходимого для тестирования вашего приложения Angular и запуска всех спецификационных файлов, заканчивающихся на.spec.ts
в вашем каталогеsrc
. - Карма сообщает результат теста на консоль.
- 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 загружает
.angular-cli.json
. - Angular CLI запускает Protractor с конфигурацией, указанной в
.angular-cli.json
. По умолчанию это файлprotractor.conf.js
расположенный в корневом каталоге вашего приложения. - Транспортир открывает браузер, указанный в конфигурации Транспортира. По умолчанию в браузере установлен Google Chrome .
- Затем Protractor инструктирует браузер (Chrome) запустить все файлы спецификаций, заканчивающиеся на
.e2e-spec.ts
в вашемe2e
. - Транспортир сообщает результат теста на консоль.
Процесс завершается автоматически после шага 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]
Вот что происходит за кулисами:
- Angular CLI загружает свою конфигурацию из
.angular-cli.json
. - Angular CLI запускает Webpack для сборки и связывания всего кода JavaScript и CSS.
- Результат записывается в каталог
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".
Вот что происходит за кулисами:
-
.angular-cli.json
свойствоejected: true
добавляется в файл.angular-cli.json
- Файл
webpack.config.js
создается в корне вашего приложения с автономной конфигурацией Webpack, поэтому вы можете создать свой проект без Angular CLI. - Сценарий
build
в вашемpackage.json
обновлен, поэтому вы можете запуститьnpm run build
для сборки вашего проекта - Сценарий
test
в вашемpackage.json
обновлен, поэтому вы можете запуститьnpm run test
илиnpm test
чтобы запустить свои модульные тесты - Сценарий
start
в вашемpackage.json
обновлен, поэтому вы можете запуститьnpm run start
илиnpm start
для запуска сервера разработки - Сценарий
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 как можно лучше!