Node.js 26: полное руководство — Temporal API, V8 14.6, Undici 8 и миграция
Техническое руководство · 27 мая 2026

Node.js 26: полное руководство
Temporal API, V8 14.6, Undici 8 и миграция

Всё, что нужно знать о релизе Node.js 26 — Temporal API по умолчанию, обновление движка V8 14.6, улучшения Undici 8, критические изменения и практическое руководство по миграции. С примерами кода.

Олег Максимов 27 мая 2026 18 мин чтения

Введение

5 мая 2026 года вышел Node.js 26.0.0 — и это, пожалуй, самый значимый релиз в цикле 22→24→26. Node.js 26 приносит четыре крупных изменения, которые затрагивают каждого Node.js-разработчика:

Это руководство охватывает каждое изменение глубоко, с практическими примерами кода, пошаговой стратегией миграции и честным советом: обновляться сейчас или ждать LTS.

1. Temporal API: долгожданная замена Date

Temporal API — главная фича Node.js 26. После лет за флагом --experimental-temporal он теперь включён по умолчанию без флагов. Это самое большое улучшение JavaScript API со времён Promise.

Почему Temporal заменяет Date

Объект Date в JavaScript был проблемным с 1995 года. Он мутабелен, не учитывает часовые пояса, имеет непредсказуемое поведение в разных средах, а нумерация месяцев (0-11 вместо 1-12) вызывает бесконечные баги. Temporal исправляет всё это:

Типы Temporal

Тип Что представляет Пример
Temporal.PlainDate Дата без времени и часового пояса (календарь) "2026-05-27"
Temporal.PlainTime Время без даты и часового пояса "14:30:00"
Temporal.PlainDateTime Дата и время без часового пояса "2026-05-27T14:30:00"
Temporal.ZonedDateTime Дата и время с конкретным часовым поясом "2026-05-27T14:30:00+03:00[Europe/Minsk]"
Temporal.Instant Абсолютный момент времени (UTC), точность до наносекунд "2026-05-27T11:30:00Z"
Temporal.Duration Промежуток времени (дни, часы, минуты и т.д.) "P1DT6H30M"
Temporal.TimeZone IANA-таймзона с правилами перехода на летнее время "Europe/Minsk"
Temporal.Calendar Календарная система (ISO 8601, иудейский, исламский и др.) "iso8601"

Примеры до/после: Date vs Temporal

Создание дат: С Date — неопределённость с часовым поясом. С Temporal — явно.

// ❌ Date — мутабельный, неопределённый с таймзоной const d = new Date("2026-05-27T10:00:00"); d.setHours(14); // мутирует оригинал — побочные эффекты везде // ✅ Temporal — иммутабельный, явный const date = Temporal.PlainDate.from("2026-05-27"); const zoned = Temporal.ZonedDateTime.from({ timeZone: "Europe/Minsk", year: 2026, month: 5, day: 27, hour: 10, minute: 0 }); const later = zoned.add({ hours: 4 }); // НОВЫЙ экземпляр, zoned не изменился

Работа с длительностями: Больше никакой ручной арифметики в миллисекундах.

// ❌ Date — ручная арифметика в миллисекундах const now = new Date(); const tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000); // А если переход на летнее время? 24 часа может быть 23 или 25! // ✅ Temporal — безопасная, календарно-зависимая арифметика const today = Temporal.Now.plainDateISO(); const tomorrow = today.add(Temporal.Duration.from({ days: 1 }));

Конвертация часовых поясов: Источник бесконечных багов Date — теперь очевидный.

// ✅ Temporal — явная конвертация часовых поясов const meeting = Temporal.ZonedDateTime.from({ timeZone: "Europe/London", year: 2026, month: 6, day: 15, hour: 14, minute: 0 }); const minskTime = meeting.withTimeZone("Europe/Minsk"); const utcInstant = meeting.toInstant(); console.log(`Лондон: ${meeting.toString()}`); console.log(`Минск: ${minskTime.toString()}`); console.log(`UTC: ${utcInstant.toString()}`);

2. V8 14.6: новые возможности JavaScript

Node.js 26 включает V8 14.6.202.33 на базе Chromium 146. Два предложения JavaScript на Stage 4 готовы к использованию.

Upsert: Map.getOrInsert и getOrInsertComputed

Map.prototype.getOrInsert() и Map.prototype.getOrInsertComputed() решают типичную задачу «получить значение из Map или создать и сохранить».

// ❌ До — ручная проверка, три обращения const cache = new Map(); function getCachedData(key) { if (!cache.has(key)) { cache.set(key, fetchExpensiveData(key)); } return cache.get(key); } // ✅ После — атомарная операция const cache = new Map(); function getCachedData(key) { return cache.getOrInsertComputed(key, fetchExpensiveData); }

Iterator.concat: ленивое объединение итераторов

Iterator.concat() объединяет несколько итераторов в один ленивый — без создания промежуточных массивов.

// ❌ До — промежуточные массивы const all = [...fetchPage(1), ...fetchPage(2), ...fetchPage(3)]; // ✅ После — лениво, без массивов for (const item of Iterator.concat( fetchPage(1), fetchPage(2), fetchPage(3) )) { process(item); }

3. Undici 8: HTTP-клиент нового поколения

Undici — HTTP/1.1 и HTTP/2 клиент, на котором работает встроенный fetch(), http.request() и все исходящие HTTP-операции Node.js. В Node.js 26 Undici обновлён до версии 8.0.2.

Ключевые улучшения: улучшенное соответствие WHATWG Fetch (поведение fetch() теперь ближе к браузерному), улучшенная работа со стримами и backpressure, улучшения управления соединениями, исправление краевых случаев в обработке chunked transfer encoding и таймаутов.

4. Критические изменения и удаление устаревших API

Node.js 26 основательно чистит устаревший API. Вот что удалено и что объявлено устаревшим.

Полностью удалено (код сломается)

Новые runtime-предупреждения (появятся в консоли)

5. Руководство по миграции: с Node.js 22/24 LTS на 26

Пошаговый процесс обновления до Node.js 26.

Шаг 1: Аудит кодовой базы

# Поиск удалённых API grep -r "writeHeader" src/ grep -r "_stream_" src/ grep -r "experimental-transform-types" . grep -r "module\.register" src/

Шаг 2: Установка Node.js 26

nvm install 26 nvm use 26 node --version # v26.0.0

Шаг 3: Проверка предупреждений

node --pending-deprecation your-app.js

6. Обновляться сейчас или ждать LTS?

Node.js 26 выпущен 5 мая 2026 как Current-релиз. Он перейдёт в Active LTS в октябре 2026.

Обновляйтесь сейчас ✅

Ждите LTS ⏳

Node.js 26 — исторический релиз: это последняя версия по двухразовой схеме. С Node.js 27 проект переходит на один major-релиз в год, что сделает обновления более предсказуемыми.

Помогу с миграцией — мои услуги по разработке на Node.js

Часто задаваемые вопросы

Что такое Temporal API и почему это важно?
Temporal — это современный API для работы с датой и временем в JavaScript, полностью заменяющий проблемный объект Date. Он предоставляет иммутабельные, учитывающие часовые пояса объекты: PlainDate, ZonedDateTime, Instant, Duration и другие. Temporal устраняет проблемы ручного преобразования временных зон, непредсказуемой арифметики дат и неявных приведений типов. В Node.js 26 включён по умолчанию — без флагов. Для понимания того, как Temporal вписывается в общую эволюцию JavaScript, читайте моё полное руководство по ES2026.
Какие критические изменения в Node.js 26?
Node.js 26 удаляет несколько давно устаревших API: http.Server.prototype.writeHeader() (используйте writeHead), модули _stream_* (_stream_readable, _stream_writable и др.), флаг --experimental-transform-types. Также добавлены runtime-предупреждения для module.register(), crypto DEP0203 и DEP0204, stream DEP0201. Нативные аддоны нужно перекомпилировать (NODE_MODULE_VERSION обновлён до 147), а GCC должен быть версии 13.2+.
Стоит ли обновляться до Node.js 26 сейчас или ждать LTS?
Node.js 26 выпущен 5 мая 2026 года как Current-релиз и перейдёт в Active LTS в октябре 2026. Для продакшена лучше дождаться LTS, если только вам не нужны Temporal API, V8 14.6 или Undici 8 прямо сейчас. Для CI/CD, сред разработки и новых проектов обновляться уже можно и нужно. Node.js 26 — последний релиз по двухразовой схеме: с 27-й версии будет один major-релиз в год.
Как Undici 8 меняет fetch в Node.js?
Undici 8 — это HTTP-клиент, на котором работает встроенный fetch() в Node.js. Версия 8 улучшает соответствие спецификации WHATWG Fetch, делая поведение fetch() в Node.js более похожим на браузерную реализацию. Улучшена работа со стримами, управление соединениями, исправлены краевые случаи при обработке chunked transfer encoding и таймаутов. Для большинства приложений обновление прозрачно, но стоит протестировать стриминг и обработку ошибок.
Какие новые возможности JavaScript даёт V8 14.6?
V8 14.6 (часть Chromium 146) добавляет два предложения JavaScript на Stage 4: Upsert-предложение (Map.prototype.getOrInsert() и Map.prototype.getOrInsertComputed() для атомарной операции «получить или создать» в Map и WeakMap) и объединение итераторов через Iterator.concat() для ленивой комбинации нескольких итераторов. Оба готовы к использованию в продакшене. Дополнительно в V8 появилась нативная поддержка Promise.try (Chrome 128+) — смотрите моё полное руководство по Promise.try с примерами кода и стратегиями миграции.
Как мигрировать с Node.js 22 или 24 на Node.js 26?
Начните с поиска устаревших API: writeHeader, _stream_*, --experimental-transform-types. Запустите Node.js 26 с флагом --pending-deprecation для выявления всех предупреждений. Замените полифилл Temporal на нативную реализацию. Протестируйте поведение Undici 8 (стриминг, обработка ошибок). Проверьте, что GCC 13.2+ установлен для сборки нативных аддонов. Запустите полный набор тестов перед развёртыванием. Обратите внимание: модель разрешений перешла из экспериментальной в стабильную в Node.js 26.3 — читайте моё руководство по модели разрешений Node.js с полным API process.permission.has() и process.permission.drop(). Для сравнения Node.js с альтернативными рантаймами читайте моё руководство по Deno 2.8 с полным сравнением рантаймов.
Node.js 26 — последний релиз по текущему циклу?
Да. Node.js 26 — последний major-релиз по схеме два релиза в год. Начиная с Node.js 27, проект переходит на один major-релиз в год. Это означает меньше разрушительных обновлений и более предсказуемое долгосрочное планирование. Node.js 22 LTS поддерживается до апреля 2027, 24 LTS — до апреля 2029, у команд достаточно времени для планирования.

Готовы работать на Node.js 26?

Node.js 26 — надёжный релиз, который модернизирует рантайм значимыми улучшениями. Один Temporal API стоит обновления для любого приложения, работающего с датами, часовыми поясами или планированием.

Если вам нужна помощь с обновлением вашего Node.js-приложения или оценкой того, подходит ли Temporal API под вашу архитектуру — я предоставляю консультационные услуги и разработку для Node.js-проектов любого масштаба. С 20-летним опытом full-stack разработки я провёл команды через каждое крупное обновление Node.js начиная с v12.

Я — senior full-stack разработчик, специализирующийся на Node.js, React и современном JavaScript. Нахожусь в Минске и работаю по всему миру, давайте обсудим ваш проект.

Связаться

Обсудим ваш проект

Нужна помощь с переходом на Node.js 26 или созданием нового приложения? Предоставляю разработку, миграцию и консультации. Бесплатная первичная консультация.