DevKucher;

Доступна 14 версия Node.js

Изображение на обложке для Доступна 14 версия Node.js

В этом релизе:

  1. Диагностический отчет становится стабильным
  2. V8 обновлен до V8 8.1
  3. Экспериментальный интерфейс Async Local Storage API
  4. Потоки
  5. Экспериментальный Web Assembly System интерфейс
  6. Удалено предупреждение об экспериментальных модулях

Node.js 14 заменяет 13 версию в качестве текущей версии. Согласно (расписанию релизов) Node.js 14 будет в качестве текущей версии в течение следующих 6 месяцев, а затем перейдет в долгосрочную поддержку (LTS) в октябре 2020 года. Как всегда, корпоративным пользователям лучше подождать с обновлениям своих рабочих проектов до октября, когда Node.js будет в стадии LTS. Однако сейчас самое время начать тестирование приложений с Node.js 14 и попробовать новые функции.

Node.js 12 и Node.js 10 будут оставаться в долгосрочной поддержке до апреля 2022 года и апреля 2021 года соответственно (подробнее о стратегии LTS здесь).

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

Диагностический отчет становится стабильным

Диагностический отчет будет выпущен в качестве стабильной функции в Node.js 14 (он был добавлен в качестве экспериментальной функции в Node.js 12). Это важный шаг в текущей работе в рамках проекта по улучшению и созданию диагностики доступной при использовании Node.js, и легкости с которой их можно использовать.

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

V8 обновлен до V8 8.1

Как всегда, новая версия движка JavaScript V8 приносит улучшения и улучшения производительности, а также поддерживает Node.js с текущими улучшениями языка и времени выполнения. На этот раз у нас также есть небольшое удовольствие и от именования: 8-я версия V8 («V8 из V8»).

Основные особенности новых функций JavaScript включают в себя:

  • Необязательное связывание - MDN

  • Nullish Coalescing - MDN

  • Intl.DisplayNames - MDN

  • Включает параметры календаря и системы нумерации для Intl.DateTimeFormat - MDN

Дополнительную информацию о новых функциях V8 можно найти в блоге V8.

Экспериментальный интерфейс Async Local Storage API

Интерфейс добавлен, чтобы помочь управлять контекстом в асинхронных вызовах. Экспериментальный Async Hooks API был представлен в более ранних версиях как часть этого API. Одним из ключевых вариантов использования Async Hooks было Async Local Storage (также называемое Continuation Local Storage). Существовал ряд модулей npm, которые предоставили API для удовлетворения этой потребности, однако, на протяжении многих лет их было сложно поддерживать вне ядра Node.js, и был достиг консенсуса о том, что Node.js нужно предоставлять свой API. Релиз 14.x содержит экспериментальный API-интерфейс Async Local Storage (который также был перенесен в 13.10). Разработчики ждут чтобы сообщество, опробовало этот API и дало обратную связь по модели абстракции, интерфейсу API, охвату вариантов использования, функциональной стабильности, именованию, документации и т.д.. Лучший способ оставить отзыв - это открыть вопрос в (репозитории диагностики) с заголовок «Experience report with AsyncLocalStorage API».

Потоки

Этот релиз включает ряд изменений, помеченных как основные SemVer в реализации потоков Node.js. Эти изменения предназначены для улучшения согласованности API-интерфейсов Streams с целью устранения неоднозначности и оптимизации поведения в различных частях ядра Node.js. Например, http.OutgoingMessage похож на stream.Writable, а net.Socket ведет себя точно так же, как stream.Duplex. Заметным изменением является то, что параметр autoDestroy теперь по умолчанию имеет значение true, поэтому поток всегда вызывает _destroy после завершения. Скорее всего эти серьезные изменения в SemVer не коснутся большинства приложений, поскольку они изменяют только крайние случаи, если вы сильно полагаетесь на Streams, было бы неплохо протестировать, пока Node.js 14 является текущей версией.

Экспериментальный Web Assembly System интерфейс

Пакеты, написанные в Web Assembly для Node.js, дают возможность для повышения производительности и кроссплатформенной поддержки для определенных случаев использования. Релиз 14.x включает экспериментальную реализацию системного интерфейса Web Assembly (WASI) для поддержки этих вариантов использования. Это примечательно, поскольку WASI обладает потенциалом для значительного упрощения работы с собственными модулями. Подробнее об этом можно прочитать в документации по API.

Удалено предупреждение об экспериментальных модулях

В Node.js 13 убрали необходимость включать флаг — experimental-modules, но при запуске модулей EcmaScript все равно приведет к предупреждению ExperimentalWarning: The ESM module loader is experimental.

Начиная с Node.js 14, это предупреждение больше не используется при использовании ESM в Node.js. Однако реализация ESM в Node.js остается экспериментальной. Согласно индексу стабильности Node.js: «Эта функция не подчиняется правилам семантического контроля версий. Несовместимые изменения или удаление могут произойти в любом будущем релизе». Пользователи должны быть осторожны при использовании этой функции в продакшене.

Помните, что реализация ESM в Node.js отличается от опыта разработчика, с которым вы, возможно, знакомы. Большинство рабочих процессов переноса поддерживают такие функции, как необязательные расширения файлов или модули JSON, которые не поддерживаются реализацией Node.js ESM. Весьма вероятно, что для работы модулей в транспонированных средах в Node.js. потребуется определенная степень рефакторинга. Стоит отметить, что многие дизайнерские решения были приняты с двумя основными целями: cоответствие спецификациям и веб-совместимость.

Реализация ESM в Node.js все еще является экспериментальной, но разработчики ядра считают, что они очень близки к тому, чтобы называть ESM в Node.js «стабильным». Удаление предупреждения - огромный шаг в этом направлении.

Релизером Node.js v14.0.0 является Бетани Григгс. Вы можете просмотреть полный список функций v14.0.0 здесь.