Какво ново в Angular 10.1

Angular 10.1.0, последваща версия на Angular 10, беше пусната на 2 септември, като донесе подобрения в производителността на компилатора и рутера заедно с нов инструмент за извличане на съобщения. 

Angular 10 стана общодостъпна като производствена версия на 24 юни. Основното надграждане на разработената от Google рамка, базирана на TypeScript, постави по-голям акцент върху подобренията на качеството, инструментите и екосистемите, отколкото новите функции.

Angular 10 е по-малък от предишните версии на Angular. Новите възможности включват нов инструмент за избор на период от време в библиотеката с компоненти на Angular Material UI и предупреждения за импортиране на CommonJS. Предупрежденията за импортиране на CommonJS предупреждават разработчиците, когато зависимост, пакетирана с CommonJS, може да доведе до по-големи, по-бавни приложения, позволявайки на разработчиците да заменят пакет от модули ECMAScript.

В допълнение, допълнителните по-строги настройки предлагат по-строга настройка на проекта при създаване на ново работно пространство с ng new, чрез ng new --strict. Enablng този флаг инициализира нов проект с нови настройки, за да подобри поддръжката, да помогне за улавяне на грешки и да позволи на CLI да прави разширени оптимизации на приложение.

Къде да изтеглите Angular 10

Можете да намерите общото издание на Angular 10 на GitHub. За да актуализирате текущата си Angular инсталация, можете да изпълните тази команда:

ng update @ angular / cli @ angular / core

Нови функции в Angular 10.1.0

Изданието Angular 10.1.0, достъпно на GitHub, включва следните нови възможности и подобрения: 

  • За да подобри производителността в компилаторния клип, Angular 10.1 има поправка за регресии на производителността, засягащи инкременталното повторно използване на програмата.
  • За производителност на рутера prioritizedGuardValueсе прилага операторът за оптимизиране на CanLoadзащитите.
  • ProgramBasedEntryPointFinderще използва повторно, за EntryPointManifestда зареди зависимости от входната точка, когато е възможно, което избягва да се налага да ги анализира отново при всяко извикване на ngcc.
  • Поддържа се нов инструмент за извличане на съобщения, който в крайна сметка ще бъде интегриран в CLI.
  • За инструмента за изграждане на Bazel LinkabablePackageInfoсе добавя към ng-moduleправилото, което позволява на линкера да свързва правилно ng_moduleцелите в действията по време на изпълнение на Node.js.
  • Повече информация се добавя към диагностиката, произведена за статични грешки в оценката.
  • Добавена е опция за абсолютна URL поддръжка на HTTP.
  • Поддръжката на TypeScript 4.0 е добавена към компилатора.
  • canparse() диагностиката е изложена.
  • Подобрения в производителността са направени в рутера, формулярите, CLI на компилатора и инструмента за съвместимост на ngcc компилатора.
  • Модифицирането на куките на жизнения цикъл може да се извърши по всяко време преди стартиране.
  • Предлагат се редица големи поправки за ядро, рутер и други части на Angular.

Нови функции в Angular 10

Основните характеристики на Angular 10 включват следното:

  • TSlib, библиотеката по време на изпълнение за TypeScript, съдържаща помощни функции, е актуализирана до TSlib 2.0. Инструментът за статичен анализ TSLint за TypeScript е актуализиран до TSLint 6.
  • Добавен е интерфейс на компилатор, който обгръща действителния компилатор ngtsc. Специфичният компилатор на езикова услуга управлява множество файлове за проверка на типа, използвайки интерфейса на проекта, създавайки Scriptinfos, ако е необходимо.
  • Конфигурацията на браузъра за нови проекти е актуализирана, за да се изключат по-старите, по-малко използвани браузъри. Поддръжката е оттеглена за Internet Explorer 9, Internet Explorer 10 и Internet Explorer Mobile.
  • Angular Package Format вече не включва ESM5 или FESM5 пакети, спестявайки време за изтегляне и инсталиране при изпълнение yarnили npm installза Angular пакети и библиотеки.
  • За компилатора са добавени обхвати на имената за четене на свойства и извиквания на методи.
  • EntryPointFinder, добавен е програмен търсач на входни точки, който може да се попълни от импортирането в програма, посочена от файл tsjconfig.json. Очаква се това да е по-бързо от времето, DirectoryWalkerEntryPointFinderкогато активната програма импортира само малка част от инсталираните входни точки. 
  • Автодовършването се премахва от HTML обекти, например &поради съмнителна стойност и проблем с производителността.
  • Изричното картографиране е изложено от затваряне на файлове на devmode. Тази функция е насочена към инструменти за разработка, които трябва да преобразуват производствените входящи материали в техните еквиваленти на devmode.
  • При пробивна промяна генерикът стана задължителен за ModuleWithProviders. Параметър на общ тип е необходим, за да може ModuleWithProvidersшаблонът да работи с конвейера за компилация и рендиране на Ivy, но преди този фиксиране View Engine е позволил да се пропусне общия тип. Ако разработчик използва ModuleWithProvidersбез общ тип, миграцията на версия 10 ще актуализира кода. Но ако разработчик използва View Engine и в зависимост от библиотека, която пропуска родовия тип, ще бъде издадена грешка при изграждането. В този случай ngcc няма да помогне и миграцията ще обхваща само кода на приложението. Трябва да се свържете с автора на библиотеката, за да поправите библиотеката си. Като заобиколно решение, skipLibChecks може да бъде настроен на false в tsconfig или актуализиране на приложение, за да се използва само Ivy.
  • Сега се предлага TypeScript 3.9, като е премахната поддръжка за TypeScript 3.8. Това е пробивна промяна. TypeScript 3.6 и TypeScript 3.7 също вече не се поддържат.
  • Подобрения на производителността при проверка на типа са направени в компилатора-cli.
  • За да се подобри производителността, изчисляването на basePathsе станало мързеливо, така че работата се извършва само ако е необходимо през TargetedEntryPointFinder. Преди това basePaths се изчисляваше винаги, когато търсачът беше създаден, което беше загуба на усилия в случая, когато целевата входна точка вече беше обработена.
  • Поддържа се обединяване на множество преводни файлове. Преди това беше разрешен само един файл за превод на локал. Сега потребителите могат да посочат множество файлове на локал и транзакциите от всеки файл ще бъдат обединени чрез идентификатор за съобщения.
  • Могат да се конфигурират асинхронни изчаквания за заключване. Това добавя поддръжка за файла ngcc.config.js за настройка retryAttemptsи retryDelay опции за AsyncLocker. Интеграционен тест добавя нова проверка за изчакване и използва ngcc.config.js, за да намали времето за изчакване, за да предотврати отнемането на твърде дълго време от теста.
  • При пробивна промяна предупрежденията за неизвестни елементи сега се регистрират като грешки. Въпреки че това няма да повреди приложение, то може да задейства инструменти, които очакват нищо да не се регистрира чрез console.error. 
  • При друга пробивна промяна всеки преобразувател, който се върне, EMPTYще отмени навигацията. За да позволи навигацията да продължи, разработчиците трябва да актуализират резолверите, за да актуализират някаква стойност, като default!Empty.
  • Добавянето на информация за зависимостите и селектори на ng-съдържание към метаданни. Тази предложена функция на компилатора би осигурила допълнителни метаданни, полезни за инструменти като Angular Language Service, предлагайки възможността да предоставя предложения за директиви / компоненти, дефинирани в библиотеките.
  • Подобрения в производителността, постигнати чрез намаляване на размера на манифеста на входната точка и техниката на кеширане в манифеста. Освен това кеширането на зависимости се извършва в манифеста на входната точка и се чете от там, вместо да се изчислява всеки път. Преди, дори ако една входна точка не се нуждаеше от обработка, ngcc (Angular Ivy compatibility compiler) ще анализира файловете на входната точка, за да изчисли зависимости, което ще отнеме много време за модулите large_node.
  • За да се подобри производителността на ngcc, сега е разрешено незабавно отчитане на остарял файл за заключване. Освен това се съхранява кеширано копие на анализиран файл tsconfig, който може да се използва повторно, ако пътят tsconfig е същият.
  • При пробивна промяна логиката е актуализирана във връзка с форматирането на дневни периоди, които пресичат полунощ. Когато форматирахте време с кода bили Bформатирайте, визуализираният низ не обработваше правилно дневни периоди, които обхващаха дни. Вместо това логиката се връща към случая по подразбиране на AM. Тази логика е актуализирана, така че съвпада с часове в рамките на един ден, който се простира след полунощ, така че сега ще изведе правилен изход, като at nightв случая на английски. Приложенията, използващи или formatDate()или, DatePipeили кодовете bи  Bформат ще бъдат засегнати от тази промяна.
  • За рутера CanLoadпазачът вече може да се върне Urltree. А CanLoadохрана връщане Urltreeотменя текущата навигация и пренасочвания. Това съвпада с текущото поведение, достъпно за CanActivateпазачите, което също е добавено. Това не засяга предварителното зареждане. А CanLoadохрана блокове всяко предварително натоварване; всички маршрути с CanLoadохрана няма да бъдат предварително заредени и защитите няма да бъдат изпълнени като част от предварително зареждане.
  • Разпространение на правилния диапазон на стойността в ExpressionBinding на израз на микросинтаксис към ParsedProperty, което от своя страна ще разпространи обхвата до AST на шаблона (както VE, така и Ivy). Това предложение също е за компилатора.
  • Като корекция на ядрото, логиката ще бъде добавена към миграцията на неокрасени класове, за да се украсят производни класове от недекорирани класове, които използват Angular функции.
  • При пробивна промяна типът на Urlmatcher ще отразява, че винаги може да върне null.
  • За сервизния работник е въведена корекция за ситуация, при която е имало шанс сервизният работник никога да не се регистрира, когато има продължителна задача или повтарящо се изчакване.
  • Направени са редица корекции на грешки, включително компилаторът, избягващ недефинирани изрази в дупчив масив, и ядрото, избягващо грешка при миграция при импортиране на несъществуващ символ. В ядрото също има заобиколно решение за вградената грешка на Terser. Друга корекция на грешки правилно идентифицира модули, засегнати от замествания в TestBed.
  • Angular NPM вече не съдържа определени jsdoc коментари в подкрепа на разширените оптимизации на компилатора на затваряне. Това е пробивна промяна. Поддръжката на компилатора за затваряне в пакети е експериментална и неработеща от известно време. Всеки, който използва Closure Compiler, вероятно е по-добре да консумира Angular пакети, изградени директно от източници, вместо да използва версии, публикувани на NPM. Като временно решение потребителите могат да обмислят използването на текущия си компилационен тръбопровод с флаг за затваряне --compilation_level=SIMPLE. Този флаг ще гарантира, че тръбопроводът за изграждане произвежда изграждащи се, изпълними артефакти, на цената на увеличен размер на полезния товар поради деактивиране на разширените оптимизации.