Этот блог написала Бетани Григгс при участии Технического руководящего комитета Node.js.

Мы рады объявить о выпуске Node.js 16 сегодня! Основные моменты включают обновление движка V8 JavaScript до 9.0, предварительно созданные двоичные файлы Apple Silicon и дополнительные стабильные API.

Вы можете загрузить последнюю версию с https://nodejs.org/en/download/current/ или использовать Диспетчер версий узлов в UNIX для установки с nvm install 16. Сообщение в блоге Node.js, содержащее журнал изменений, доступно по адресу https://nodejs.org/en/blog/release/v16.0.0.

Первоначально Node.js 16 заменит Node.js 15 в качестве нашей текущей линии выпуска. Согласно графику выпуска, Node.js 16 будет Текущим выпуском в течение следующих 6 месяцев, а затем будет переведен на долгосрочную поддержку (LTS) в октябре 2021 года. После перехода на долгосрочную поддержку выпуск будет обозначил кодовое имя Галлий.

Напоминаем, что Node.js 12 останется в долгосрочной поддержке до апреля 2022 года, а Node.js 14 останется в долгосрочной поддержке до апреля 2023 года. Node.js 10 перестанет работать в конце срока службы. в этом месяце (апрель 2021 г.). Более подробную информацию о нашем плане / графике выпуска можно найти в репозитории рабочей группы по выпуску Node.js.

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

Как всегда, новая версия движка V8 JavaScript содержит настройки и улучшения производительности, а также поддерживает актуальность Node.js с помощью языковых функций JavaScript. В Node.js v16.0.0 движок V8 обновлен до V8 9.0 - по сравнению с V8 8.6 в Node.js 15.

Это обновление содержит индексы соответствия ECMAScript RegExp, которые предоставляют начальный и конечный индексы захваченной строки. Массив индексов доступен через свойство .indices в объектах сопоставления, если регулярное выражение имеет флаг /d.

> const matchObj = /(Java)(Script)/d.exec('JavaScript');
undefined
> matchObj.indices
[ [ 0, 10 ], [ 0, 4 ], [ 4, 10 ], groups: undefined ]
> matchObj.indices[0]; // Match
[ 0, 10 ]
> matchObj.indices[1]; // First capture group
[ 0, 4 ]
> matchObj.indices[2]; // Second capture group
[ 4, 10 ]

Для получения дополнительной информации о новых функциях и обновлениях в V8 посетите блог V8: https://v8.dev/.

API обещаний стабильных таймеров

API Timers Promises предоставляет альтернативный набор функций таймера, которые возвращают объекты Promise, избавляя от необходимости использовать util.promisify().

import { setTimeout } from 'timers/promises';
async function run() {
  await setTimeout(5000);
  console.log('Hello, World!');
}
run();

Добавлено в Node.js v15.0.0 Джеймсом Снеллом (https://github.com/nodejs/node/pull/33950), в этом выпуске они переходят из экспериментального статуса в стабильный.

Другие недавние функции

Характер нашего процесса выпуска означает, что новые функции в линейке «Текущих» выпусков появляются примерно каждые две недели. По этой причине многие недавние дополнения уже стали доступны в самых последних выпусках Node.js 15, но все еще относительно новы для среды выполнения.

Некоторые из недавно выпущенных функций в Node.js 15, которые также будут доступны в Node.js 16, включают:

  • Экспериментальная реализация стандарта Web Crypto API
  • npm 7 (v7.10.0 в Node.js v16.0.0)
  • Node-API версии 8
  • Стабильная AbortController реализация на основе AbortController Web API
  • Карты стабильного исходного кода v3
  • Реализации веб-платформы atob (buffer.atob(data)) и btoa (buffer.btoa(data)) для совместимости с устаревшими API веб-платформы

Новые минимумы компилятора и платформы

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

Node.js v16.0.0 будет первым выпуском, в котором мы поставляем готовые двоичные файлы для Apple Silicon. Хотя мы будем предоставлять отдельные архивы для архитектур Intel (darwin-x64) и ARM (darwin-arm64), установщик macOS (.pkg) будет поставляться в виде «толстого» (многоархитектурного) двоичного файла.

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

На наших платформах на базе Linux минимальный уровень GCC для сборки Node.js 16 будет GCC 8.3. Подробная информация о поддерживаемых наборах инструментов и компиляторах задокументирована в файле на Node.js BUILDING.md.

Устаревшие

Как новый основной выпуск, это также время, когда мы вводим новые устаревшие версии среды выполнения. Проект Node.js направлен на минимизацию нарушения экосистемы при любых критических изменениях. В проекте используется инструмент под названием CITGM (Canary in the Goldmine), чтобы проверить влияние любых критических изменений (включая устаревание) на большое количество популярных модулей экосистемы, чтобы получить дополнительную информацию до того, как внести эти изменения.

Среди заметных недостатков в Node.js 16 - отказ во время выполнения от доступа к process.binding() для ряда основных модулей, таких как process.binding(‘http_parser’).

Спасибо!

Новый крупный выпуск - это сумма усилий всех участников проекта и соавторов Node.js, поэтому мы хотели бы воспользоваться этой возможностью, чтобы сказать вам большое спасибо. В частности, мы хотели бы поблагодарить Рабочую группу по сборке Node.js за то, что у нас есть готовая инфраструктура для создания и тестирования выпусков, а также за выполнение необходимых обновлений наших инструментальных средств для Node.js 16.