Angular 9 Теперь Доступен — Появился Ivy

Вышла 9 версия Angular, это основной релиз, охватывающий всю платформу, включая сам фреймворк, материал Angular и CLI. В этом выпуске приложения по умолчанию переключаются на компилятор и среду выполнения Ivy, а также представлены улучшенные способы тестирования компонентов.

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



Как обновиться до версии 9

Идти к update.angular.io для получения подробной информации.

Чтобы обеспечить плавное обновление, рекомендуется сначала обновить Angular 8 до последней версии.

Обновление до последней версии 8

  
  
  
  
   

ng update @angular/cli@8 @angular/core@8



ng update @angular/cli @angular/core

Чтобы узнать об основных изменениях, внесенных в это обновление, включая устаревшие API, см.

Обновление до версии 9 Angular в документации Angular.

Айви

Версия 9 по умолчанию переключает все приложения на компилятор и среду выполнения Ivy. Помимо сотен исправлений ошибок, компилятор и среда выполнения Ivy предлагают множество преимуществ:
  • Меньшие размеры комплектов
  • Более быстрое тестирование
  • Улучшенная отладка
  • Улучшена привязка классов и стилей CSS.
  • Улучшенная проверка типов
  • Улучшены сообщения об ошибках сборки.

  • Улучшено время сборки, AOT включен по умолчанию.

  • Улучшение интернационализации
Давайте подробнее рассмотрим некоторые улучшения.



Меньшие размеры комплектов

Компилятор Ivy был разработан для удаления частей Angular, которые не используются при встряхивании деревьев, и для уменьшения объема кода, генерируемого для компонентов Angular. Благодаря этим улучшениям размер приложений может значительно уменьшиться.

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

  • Крупные приложения со многими компонентами могут выиграть от сокращения размера фабрик.

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



Angular 9 теперь доступен — появился Ivy



Более быстрое тестирование

Реализация TestBed от Ivy также была обновлена и стала более эффективной.

Раньше TestBed перекомпилировал все компоненты между запусками каждого теста, независимо от того, вносились ли в компоненты какие-либо изменения (например, посредством переопределений).

В Ivy TestBed не перекомпилирует компоненты, если компонент не был переопределен вручную, что позволяет избежать перекомпиляции между большинством тестов.

Благодаря этому изменению основные тесты платформы выполняются примерно на 40 % быстрее.

Ожидается, что пользователи заметят увеличение скорости тестирования своих приложений на 40-50%.



Улучшенная отладка

Ivy предоставляет дополнительные инструменты для отладки приложений.

При запуске приложения в режиме разработки с использованием среды выполнения Ivy теперь предлагается новый объект отладки ng.

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

  • Если вы хотите увидеть результаты обнаружения изменений, вы можете запустить обнаружение изменений с помощью applyChanges.


Angular 9 теперь доступен — появился Ivy

Ivy также улучшает трассировку стека для устранения таких проблем, как ExpressionChangedAfterItHasBeenCheckederror. Раньше стек был не очень полезен:

Angular 9 теперь доступен — появился Ivy

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



Angular 9 теперь доступен — появился Ivy

Например, если вы щелкните AppComponent_Template в стеке выше, вы увидите конкретную строку сгенерированного кода, в которой возникает ошибка:

Angular 9 теперь доступен — появился Ivy

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



Улучшена привязка стилей и классов CSS.

Ivy обеспечивает улучшения обработки стилей.

Раньше, если приложение содержало конкурирующие определения стилей, стили могли переопределять друг друга.

С Ivy стили предсказуемо сливаются.

Рассмотрим следующие фрагменты шаблона и компонентов:

<my-component style="color:red;" [style.color]="myColor" [style]="{color: myOtherColor}" myDirective></div>



@Component({ host: { style: "color:blue" },.

}) .

@Directive({ host: { style: "color:black", "[style.color]": "property" },.

}) .



Раньше использовалась привязка, которая оценивалась последней, и это могло зависеть от того, когда в эти выражения были внесены изменения.

Если бы myColor и myOtherColor были неопределенными, статический «красный» стиль был бы проигнорирован.

В версии 9 вы можете управлять своими стилями с четким приоритетом, не зависящим от времени.

Наиболее специфические стили имеют наивысший приоритет. Например, привязка к [style.color] переопределяет пересекающуюся привязку [style].

Однако по соображениям обратной совместимости мы оставили поведение [ngStyle] и [ngClass] таким же, как и раньше.

При обновлении значений привязки новые значения будут переопределять любые перекрывающиеся привязки.

Подробнее о правилах приоритета стиля можно прочитать здесь.

в руководстве по синтаксису шаблона в документации.

В качестве побочного эффекта рефакторинга стиля теперь вы также можете привязываться к пользовательским свойствам CSS.

<div [style. -- main-border-color]=" '#CCC' "> <p style="border: 1px solid var( - -main-border-color)">hi</p> </div>



Улучшенная проверка типов

Компилятор Angular может проверять больше типов приложений и применять более строгие правила.

Эти функции помогут вам выявить ошибки на ранних этапах разработки.

Поддерживаются два основных флага для дополнительных проверок типов помимо стандартных:

  • fullTemplateTypeCheck — включение этого флага сообщает компилятору проверить все, что есть в вашем шаблоне (ngIf, ngFor, tn-template и т. д.)
  • strictTemplates — включение этого флага будет применять самые строгие правила проверки типов.

Подробнее о проверке типов в шаблонах

Исправлены ошибки сборки

Новый компилятор Ivy не только работает быстрее и обеспечивает лучшую безопасность типов, но также упрощает чтение сообщений об ошибках.

В версии 8 или View Engine типичная ошибка компилятора будет выглядеть так:

Angular 9 теперь доступен — появился Ivy

В версии 9 с Ivy та же ошибка выглядит так:

Angular 9 теперь доступен — появился Ivy



Улучшено время сборки, компилятор AOT включен по умолчанию.

Благодаря архитектуре Ivy производительность компилятора значительно улучшилась.

Производительность компилятора измерялась с точки зрения накладных расходов на простую компиляцию приложения TypeScript. Для нашего проекта документации (angular.io) при использовании Ivy накладные расходы увеличились с 0,8x до 0,x, то есть улучшение почти на 40 %.

Это означает, что сборки AOT могут выполняться заметно быстрее.

Благодаря этому вы можете использовать AOT даже в режиме разработки.

Это означает, что «ngserve» теперь имеет те же преимущества, что и релизные сборки, что улучшает опыт разработки Angular. Благодаря изменениям в компиляторе и среде выполнения, входные компоненты также больше не требуются.

Эти компоненты будут обнаружены и скомпилированы автоматически при их использовании.



Улучшенная интернационализация (i18n)

Интернационализация была особенностью Angular, позволяющей создать приложение один раз для одной локали и получить высокооптимизированные и локализованные приложения.

Версия 9.0 ускорила этот процесс, перенеся замены i18n на более поздние стадии процесса сборки.

Это изменение сделало его в 10 раз быстрее.

Подробнее о новом i18n : угловой /localize и новый angular.json.

Более надежное обновление ng

В работу ng update были внесены изменения, чтобы сделать его более надежным и информативным.

  • Всегда используйте последнюю версию CLI. Начиная с версии 8.3.19 CLI, мы теперь используем CLI из целевой версии обновления.

    В дальнейшем обновления всегда будут обрабатываться последней версией CLI.

  • Более четкий ход обновления.

    Обновление ng теперь дает больше информации о том, что происходит под капотом.

    Для каждой миграции вы увидите информацию о ней.

  • Упрощенная отладка обновлений.

    По умолчанию ng update запускает все миграции и оставляет совокупные изменения на диске для проверки.

    В обновлении версии 9 также представлен новый флаг --create-commits. Когда вы запускаете ng update --create-commits, инструмент фиксирует состояние вашей кодовой базы после каждой миграции, так что вы можете пошагово выполнить и отладить изменения, внесенные в ваш код.



Новые возможности "providedIn"

Когда вы создаете сервис @Injectable в Angular, вы должны выбрать, где он будет добавлен в инжектор.

Помимо предыдущих опций «корневой» и «модуль», есть еще две дополнительные опции.

  • платформа.

    Предложение ProvideIn: 'platform' делает службу доступной в специальном одноэлементном платформенном инжекторе, который используется всеми приложениями на странице.

  • любой — предоставляет уникальный экземпляр для каждого модуля (включая ленивые модули)
Подробнее о предоставленномIn

Компоненты обвязки

Тестирование компонентов исторически основывалось на использовании деталей реализации, таких как селекторы CSS, для поиска компонентов и запуска событий.

Это означало, что при каждом изменении библиотеки компонентов необходимо было обновлять все тесты, основанные на этих компонентах.

В версии 9 представлены привязки компонентов, предлагающие альтернативный способ тестирования.

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

Большинство компонентов Angular Material теперь можно тестировать с использованием этих привязок, и они также доступны любому автору компонентов в CDK. Вот пример предыдущего теста:

it("should switch to bug report template", async () => { expect(fixture.debugElement.query("bug-report-form")).

toBeNull(); const selectTrigger = fixture.debugElement.query( By.css(".

mat-select-trigger") ); selectTrigger.triggerEventHandler("click", {}); fixture.detectChanges(); await fixture.whenStable(); const options = document.querySelectorAll(".

mat-select-panel mat-option"); options[1].

click(); // Click the second option, "Bug".

fixture.detectChanges(); await fixture.whenStable(); expect(fixture.debugElement.query("bug-report-form")).

not.toBeNull(); });

И то же самое сейчас:

it("should switch to bug report template", async () => { expect(fixture.debugElement.query("bug-report-form")).

toBeNull(); const select = await loader.getHarness(MatSelect); await select.clickOptions({ text: "Bug" }); expect(fixture.debugElement.query("bug-report-form")).

not.toBeNull(); });



Новые компоненты

Теперь вы можете включать в свои приложения функции YouTube и Google Maps.
  • Вы можете встроить проигрыватель YouTube в свое приложение с помощью нового проигрывателя YouTube.
  • Мы также представляем компоненты Google-карт. Эти компоненты упрощают рендеринг Карт Google, отображение маркеров и подключение интерактивности, поэтому они работают как обычный компонент Angular, что устраняет необходимость изучения API Карт Google.


IDE и улучшенный языковой сервис

Значительные улучшения были внесены в расширение языковой службы Angular в Visual Studio Marketplace. Наряду с капитальным ремонтом архитектуры для решения проблем с производительностью и стабильностью было исправлено множество давних ошибок.

  • Грамматика синтаксиса шаблона TextMate теперь позволяет подсвечивать синтаксис как во встроенных, так и во внешних шаблонах.

  • «Перейти к определению» для templateUrl и styleUrls
  • Информация о типах и NgModule во всплывающей подсказке


Поддержка TypeScript 3.7

Angular был обновлен для работы с TypeScript 3.6 и 3.7, включая чрезвычайно популярную дополнительную функцию связывания в TypeScript 3.7. Чтобы оставаться актуальными для экосистемы, мы также обновили версии других зависимостей, таких как Zone.JS и RxJS. Теги: #Разработка сайтов #JavaScript #typescript #перевод #angular
Вместе с данным постом часто просматривают: