Node.js 26: Temporal API по умолчанию, V8 14.6 и последний релиз по старому расписанию

5 мая вышел Node.js 26.0.0. Temporal API включён по умолчанию, движок обновлён до V8 14.6, а legacy-модули _stream_* окончательно удалены. Это последняя мажорная версия по нынешней схеме релизов.

DB
DBG · по материалам Node.js Blog
0

Node.js 26.0.0 вышел 5 мая — с задержкой относительно изначально запланированной даты, но с внушительным списком изменений. Ветка Current, LTS-статус эта версия получит в октябре 2026 года.

Главная фича — Temporal API включён по умолчанию, без флагов. Это современная замена монструозному Date: нормальная работа с таймзонами, календарями, длительностями и арифметикой дат без подтягивания date-fns, dayjs или (упаси боже) moment. Для любого проекта, который хоть как-то работает со временем, это самое значимое обновление стандартной библиотеки JS за последние годы.

Движок обновлён до V8 14.6.202.33 (тот же, что в Chromium 146), Undici — до 8.0.2. Из V8 приезжают удобные мелочи: Map.prototype.getOrInsert() и getOrInsertComputed() (тот самый upsert, который все писали руками через has + set) и Iterator.concat(). В крипто-части добавили сырые форматы ключей в KeyObject API, а ML-KEM и ML-DSA теперь по умолчанию экспортируются в PKCS8 в seed-only формате.

Раздел удалений длинный. Окончательно вырезаны legacy-модули _stream_wrap, _stream_readable, _stream_writable, _stream_duplex, _stream_transform, _stream_passthrough. Удалён http.Server.prototype.writeHeader() (используйте writeHead()), убран флаг --experimental-transform-types, а module.register() помечен runtime-deprecated. Подняты требования к сборке: GCC минимум 13.2, поддержка Python 3.9 прекращена, для Windows нужен SDK 11. Отдельно стоит отметить: Node.js 26 — последний мажорный релиз по нынешней схеме. С октября 2026 проект переходит на один мажор в год, все релизы становятся LTS, а версии нумеруются по календарному году (27.0.0 уйдёт в Current в апреле 2027).

Что делать практикующему разработчику. В прод — не сейчас: до октября это Current-ветка, дождитесь LTS. А вот прогнать CI на 26 стоит уже сегодня, потому что ломается ровно две вещи. Первая: NODE_MODULE_VERSION поднялся до 147, значит любые нативные аддоны (bcrypt, sharp, canvas, драйверы БД с C++-биндингами) требуют пересборки — предсобранные бинарники под старую ABI просто не загрузятся. Вторая: _stream_*. Сам ваш код их почти наверняка не импортирует, но их до сих пор тянут старые транзитивные зависимости, и упадёт это не на сборке, а в рантайме — проверяйте grep -r "_stream_" node_modules. Если вы гоняли TypeScript через --experimental-transform-types, флага больше нет: переезжайте на --experimental-strip-types либо на нормальную сборку через tsc/esbuild. И если вы собираете Node или нативные модули из исходников на старых образах — GCC 13.2 там, скорее всего, нет, обновляйте билд-образ заранее.

Комментарии