Вышла Node.js 20. Рассказываем об обновлениях

Аватарка пользователя Рафаил Агазода
для
Логотип компании Tproger
Tproger

Node.js обновилась до 20 версии и перейдет на LTS-версию в октябре 2023 года. Рассказываем, что изменилось.

Сообщение об обновлении Node.js до 20 версии появилось в официальном блоге разработчиков.

Загрузить Node.js 20.0.0 можно здесь, а прочесть обо всех обновлениях можно на странице релиза.

Node.js 20 перейдет на долгосрочную поддержку (LTS) в октябре. До той поры он будет «текущим» релизом в течение полугода.

Будете обновляться?
Да, давно пора
Нет, подожду LTS или пока старая версия не прекратит поддержку
Обновлюсь вынужденно :(

Основные изменения в Node.js 20

Модель разрешений

Модель разрешений Node.js — это экспериментальный механизм, который ограничивает доступ к определенным ресурсам.

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

В 20 версии представлены следующие возможности:

  1. Ограничение доступа к файловой системе (чтение и запись).
    Используйте —allow-fs-read и —allow-fs-write
  2. Ограничение доступа к дочернему процессу.
    Используйте —allow-child-process
  3. Ограничение доступа к рабочим потокам.
    Используйте —allow-worker
  4. Ограничение доступа к нативным аддонам (аналогично флагу —no-addons).

Эти команды маркируются флагом --experimental-permission. Флаг позволяет запускать команды в отдельном потоке, чтобы отделить код модулей от основного кода приложения.

Ещё появились флаги --allow-fs-read и --allow-fs-write. Они позволяют детально контролировать, к каким файлам может обращаться Node.js.

Чтобы включить эти флаги, нужно использовать флаг —experimental-permission вместе с желаемыми разрешениями. Например, вот как получить получить доступ на чтение и запись ко всей файловой системе:

			$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
		

Разработчики также могут указать конкретные пути для доступа к файловой системе, передавая значения флагов через запятую. Например, следующая команда разрешает доступ на запись в папку /tmp/:

			$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js
		

Подстановочные знаки также можно использовать для разрешения доступа сразу к нескольким файлам или папкам. Например, следующая команда разрешает доступ на чтение ко всем файлам и папкам в каталоге /home/, начинающимся с test:

			$ node --experimental-permission --allow-fs-read=/home/test* index.js
		

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

V8 11.3 и Chromium 113

Новая версия движка V8 включена в Node.js (обновлена до версии 11.3, которая входит в состав Chromium 113). Теперь производительность станет выше, и можно будет использовать новые функции языка.

Совместимость с другими средами

Проект на Node.js теперь совместим с другими средами JavaScript.

Например, в Node.js 20 аргументы функций Web Crypto API теперь принудительно проверяются в соответствии с их определениями WebIDL, как и в других реализациях Web Crypto API.

Поддержка ARM64 Windows

Node.js теперь поддерживает двоичные файлы для ARM64 Windows, что позволяет спокойно выполнять код.

Пакеты MSI, zip/7z и исполняемый файл доступны на сайте загрузки Node.js наряду со всеми другими платформами.

Все изменения в Node.js 20 теперь тестируются на ARM64 Windows, чтобы предотвратить регрессии и обеспечить совместимость.

Обновление парсера

Node.js v20 поставляется с последней версией парсера URL, Ada. Это обновление значительно повышает производительность парсинга URL. Также улучшены функции url.domainToASCII и url.domainToUnicode в node:url.

Что будет со старыми версиями Node.js

Node.js 14 перестанет поддерживаться в апреле 2023 года, поэтому стоит обновиться до Node.js 18 (LTS) или Node.js 20 (LTS выйдет через полгода).

Node.js 16 (LTS) перестанет поддерживаться в сентябре 2023 года, хотя изначально это должно было случиться в апреле 2024 года. Поддержка закончится раньше, так как раньше заканчивается поддержка OpenSSL 1.1.1.

JavaScript
Языки программирования
Node.js
6551