Что нового в Angular 10.1

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

Angular 10 стал общедоступным в качестве производственной версии 24 июня. Основное обновление разработанной Google фреймворка на основе TypeScript уделяло больше внимания качеству, инструментам и улучшениям экосистемы, чем новым функциям.

Angular 10 меньше предыдущих версий Angular. Новые возможности включают новое средство выбора диапазона дат в библиотеке компонентов пользовательского интерфейса Angular Material и предупреждения для импорта CommonJS. Предупреждения об импорте CommonJS предупреждают разработчиков, когда зависимость, упакованная с CommonJS, может привести к созданию более крупных и медленных приложений, что позволяет разработчикам заменить пакет модуля ECMAScript.

Кроме того, дополнительные более строгие настройки предлагают более строгую настройку проекта при создании нового рабочего пространства с ng newпомощью, via ng new --strict. Включение этого флага инициализирует новый проект с новыми настройками, чтобы улучшить ремонтопригодность, помочь отловить ошибки и позволить интерфейсу командной строки выполнять расширенную оптимизацию в приложении.

Где скачать Angular 10

Вы можете найти общий выпуск Angular 10 на GitHub. Чтобы обновить текущую установку Angular, вы можете запустить эту команду:

ng update @ angular / cli @ angular / core

Новые возможности Angular 10.1.0

Релиз Angular 10.1.0, доступный на GitHub, включает следующие новые возможности и улучшения: 

  • Чтобы повысить производительность в compiler-cli, в Angular 10.1 есть исправление для снижения производительности, влияющего на повторное использование дополнительных программ.
  • Для производительности маршрутизатора prioritizedGuardValueоператор применяется для оптимизации CanLoadзащиты.
  • ProgramBasedEntryPointFinderбудет повторно использоваться EntryPointManifestдля загрузки зависимостей точки входа, когда это возможно, что позволяет избежать повторного анализа их при каждом вызове ngcc.
  • Поддерживается новый инструмент извлечения сообщений, который со временем будет интегрирован в интерфейс командной строки.
  • Для инструмента сборки Bazel LinkabablePackageInfoдобавляется ng-moduleправило, позволяющее компоновщику правильно связывать ng_moduleцели в действиях среды выполнения Node.js.
  • Дополнительные сведения добавляются к диагностике, произведенной для ошибок статической оценки.
  • Добавлена ​​опция поддержки абсолютного URL HTTP.
  • В компилятор добавлена ​​поддержка TypeScript 4.0.
  • canparse() диагностика.
  • Улучшена производительность маршрутизатора, форм, интерфейса командной строки компилятора и инструмента совместимости компилятора 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 больше не включает пакеты ESM5 или FESM5, что позволяет экономить время загрузки и установки при запуске yarnили npm installдля пакетов и библиотек Angular.
  • Для компилятора добавлены диапазоны имен для чтения свойств и вызовов методов.
  • EntryPointFinderбыл добавлен программный поиск точки входа, который может быть загружен из импорта в программу, указанную в файле tsjconfig.json. Ожидается, что это будет быстрее, чем DirectoryWalkerEntryPointFinderкогда активная программа импортирует только небольшую часть установленных точек входа. 
  • Автозаполнение удаляется из HTML-сущностей, например &, из-за сомнительной ценности и проблем с производительностью.
  • Явное сопоставление предоставляется из закрытия в файлы 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 также больше не поддерживаются.
  • В compiler-cli были внесены улучшения производительности проверки типов.
  • Чтобы повысить производительность, вычисление basePathsбыло сделано ленивым, поэтому работа выполняется только в случае необходимости TargetedEntryPointFinder. Раньше basePaths вычислялась всякий раз, когда создавался экземпляр Finder, что было пустой тратой усилий в случае, когда целевая точка входа уже была обработана.
  • Поддерживается объединение нескольких файлов перевода. Раньше для каждого языкового стандарта разрешался только один файл перевода. Теперь пользователи могут указать несколько файлов для каждой локали, и транзакции из каждого файла будут объединены по идентификатору обмена сообщениями.
  • Можно настроить таймауты асинхронной блокировки. Это добавляет поддержку файла ngcc.config.js для настройки параметров retryAttemptsи retryDelay для AsyncLocker. Интеграционный тест добавляет новую проверку на тайм-аут и использует ngcc.config.js, чтобы уменьшить время тайм-аута, чтобы тест не длился слишком долго.
  • В критическом изменении предупреждения о неизвестных элементах теперь регистрируются как ошибки. Хотя это не приведет к поломке приложения, это может вызвать сбой в работе инструментов, которые не ожидают, что ничего не будет регистрироваться через console.error. 
  • В другом критическом изменении любой возвращающийся преобразователь EMPTYотменяет навигацию. Чтобы продолжить навигацию, разработчики должны обновить преобразователи, чтобы обновить некоторые значения, например default!Empty.
  • Добавление к метаданным информации о зависимостях и селекторов ng-content. Эта предлагаемая функция компилятора будет предоставлять дополнительные метаданные, полезные для таких инструментов, как Angular Language Service, предлагая возможность предоставлять предложения для директив / компонентов, определенных в библиотеках.
  • Повышение производительности за счет уменьшения размера манифеста точки входа и метода кэширования в манифесте. Кроме того, кэширование зависимостей выполняется в манифесте точки входа и считывается оттуда, а не вычисляется каждый раз. Раньше, даже если точка входа не нуждалась в обработке, ngcc (компилятор совместимости с Angular Ivy) анализировал файлы точки входа для вычисления зависимостей, что занимало много времени для модулей 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. Это критическое изменение. Поддержка Closure Compiler в пакетах была экспериментальной и некоторое время не работала. Любой, кто использует Closure Compiler, скорее всего, лучше будет использовать пакеты Angular, созданные напрямую из источников, чем использовать версии, опубликованные на NPM. В качестве временного обходного пути пользователи могут рассмотреть возможность использования своего текущего конвейера сборки с флагом Closure --compilation_level=SIMPLE. Этот флаг гарантирует, что конвейер сборки создает готовые к запуску артефакты за счет увеличения размера полезной нагрузки из-за отключения расширенной оптимизации.