Deno 2.8 вышел 22 мая 2026 года — и это самый значительный минорный релиз в истории Deno. Шесть новых подкоманд, npm как менеджер пакетов по умолчанию, 74% совместимости Node.js API, import defer и многое другое. Всё, что нужно знать.
22 мая 2026 года команда Deno выпустила Deno 2.8 — и если вы не обращали внимания на Deno со времён запуска 2.0, сейчас самое время присмотреться. Этот релиз — крупнейшее минорное обновление рантайма, добавляющее шесть новых подкоманд CLI, делающее npm разрешением пакетов по умолчанию, достигающее впечатляющих 74% совместимости Node.js API (теперь опережая Bun) и представляющее import defer для ленивой загрузки модулей.
Выбираете ли вы рантайм для нового проекта или рассматриваете миграцию существующего Node.js-приложения — Deno 2.8 меняет правила игры. Это руководство охватывает каждую крупную возможность с практическими примерами кода, сравнением с Node.js 26 и Bun, а также честными советами по миграции.
| Характеристика | Deno 2.8 | Node.js 26 | Bun |
|---|---|---|---|
| Дата выхода | 22 мая 2026 | Апр 2026 | Постоянно |
| Совместимость Node.js | 74% NEW | 100% (родная) | ~68% |
| Синтаксис импорта npm | Голые спецификаторы NEW | Родной (CJS/ESM) | Голые спецификаторы |
| TypeScript | Встроен (TS 6.0.3) NEW | Через ts-node/tsx | Встроен |
| Ленивые импорты | import defer NEW |
Dynamic import() | Нет |
| Модель безопасности | На основе разрешений | Без песочницы | На основе разрешений |
| Встроенные команды | 6 новых (всего 20+) NEW | через npx/пакеты | Встроенные |
| Движок V8 | V8 14.9 NEW | V8 14.x | JavaScriptCore |
Главная особенность Deno 2.8 — добавление шести новых подкоманд CLI, превращающих Deno из рантайма в полноценный инструментарий разработки. Каждая решает конкретную проблему современной JavaScript-разработки.
deno audit fix — автоисправление уязвимых зависимостей
deno audit (вышел в Deno 2.6) сообщает об уязвимостях в npm-пакетах
вашего дерева зависимостей. Однако ручное исправление каждой было утомительным.
Новая подкоманда deno audit fix автоматизирует процесс — она обновляет
затронутые пакеты до ближайшей исправленной версии, удовлетворяющей вашим
версионным ограничениям.
$ deno audit fix
╭ body-parser уязвим к отказу в обслуживании
│ Серьёзность: высокая
│ Пакет: body-parser
│ Уязвим: <1.20.3
╰ Инфо: https://github.com/advisories/GHSA-qwcr-r2fm-qrc7
╭ Express.js Open Redirect в некорректных URL
│ Серьёзность: средняя
│ Пакет: express
│ Уязвим: <4.19.2
╰ Инфо: https://github.com/advisories/GHSA-rv95-896h-c2vc
Найдено 2 уязвимости
Серьёзность: 0 низких, 1 средняя, 1 высокая, 0 критических
Исправлена 1 уязвимость:
body-parser 1.19.0 -> 1.20.3
1 уязвимость не может быть исправлена автоматически:
express (требуется мажорное обновление до 5.0.0)
Пакеты, требующие мажорного обновления, перечисляются отдельно — вы решаете, стоит ли
ослабить ограничения. Такое же поведение доступно как deno audit --fix.
Эта функция закрывает пробел, для которого раньше требовались npm audit fix
или внешние инструменты вроде Snyk, и является сильным дополнением для команд,
обеспокоенных безопасностью цепочек поставок.
deno bump-version — интеллектуальное управление версиями
Управление номерами версий в проекте (особенно в workspace) — удивительно кропотливая
задача. deno bump-version решает её элегантно:
$ deno bump-version patch # 1.4.6 -> 1.4.7
$ deno bump-version minor # 1.4.6 -> 1.5.0
$ deno bump-version major # 1.4.6 -> 2.0.0
$ deno bump-version prerelease # 1.4.7-0 -> 1.4.7-1
В workspace запуск deno bump-version patch в корне применяет одинаковое
увеличение к каждому пакету, обновляя соответствующие версионные ограничения
jsr: и import map, чтобы перекрёстные ссылки между пакетами оставались
согласованными.
Без аргумента увеличения workspace-режим переключается на анализ Conventional Commits: сканирует коммиты между базовой ссылкой и текущей веткой, автоматически выводя увеличение для каждого пакета.
$ deno bump-version --base=main --dry-run
deno ci — воспроизводимая установка для CI
CI-скриптам и Dockerfile нужно одно: «дай мне то, что в lockfile, и громко ошибись,
если что-то не так». deno ci делает именно это:
$ deno ci
Ошибка, если deno.lock отсутствует, удаляет существующий
node_modules и запускает установку с --frozen — lockfile
должен точно соответствовать конфигурационному файлу.
deno pack — сборка Deno-проектов для npm
deno pack объединяет функциональность tsc + npm pack
в одной команде. Он собирает Deno или JSR проект в npm-архив одной
строкой:
$ deno pack
# Результат: ./deno-project-1.0.0.tgz
Это революция для авторов библиотек. Вы пишете код в TypeScript-native среде Deno и публикуете в npm без инструментов сборки.
deno transpile — транспиляция TypeScript/JSX$ deno transpile src/**/*.ts --out-dir dist/
В отличие от deno bundle (который создаёт один файл), deno transpile
сохраняет структуру файлов в выходной директории.
deno why — объяснение дерева зависимостей$ deno why express
[email protected]
├── [email protected]
├── [email protected]
├── [email protected]
│ └── [email protected]
│ └── [email protected]
└── ...
Помогает выявлять ненужные или дублирующиеся зависимости — небольшое, но полезное улучшение качества жизни.
Это крупный эргономический сдвиг. В Deno 2.8 голые спецификаторы вроде
"express" или "lodash" теперь резолвятся в npm
автоматически. Префикс npm: больше не нужен:
// До Deno 2.8
import express from "npm:express";
// Deno 2.8 — голый спецификатор резолвится в npm
import express from "express";
Deno проверяет npm-реестры как цель разрешения по умолчанию наравне с URL-импортами
и import maps. Префикс npm: всё ещё работает для явного использования,
и вы по-прежнему можете закреплять версии через import maps. Но для повседневной
разработки Deno теперь неотличим от Node.js при получении пакетов из npm.
Deno 2.0 имел примерно 42% совместимости Node.js API. Deno 2.8 почти удваивает этот показатель до 74%, опережая Bun (~68%).
Скачок покрывает многие наиболее востребованные модули:
child_process — значительно расширен: spawn, exec, forkcluster — частичная поддержка многопроцессных нагрузокvm — улучшенное выполнение кода в песочницеasync_hooks — теперь работает для APM-инструментацииimport defer — ленивая загрузка модулей// Этот модуль НЕ загружается при запуске — только при вызове parseMarkdown()
import defer { parseMarkdown } from "./markdown-parser.ts";
export function renderPost(markdown: string, template: string) {
const html = parseMarkdown(markdown); // загружается здесь
return renderTemplate(html, template);
}
В отличие от динамического import() (асинхронный, возвращает Promise),
import defer синхронный — модуль загружается при
первом обращении к любому его экспорту, прозрачно для вызывающего кода.
Deno 2.8 поставляется с TypeScript 6.0.3, предоставляя разработчикам немедленный доступ к новейшим возможностям TypeScript без конфигурации.
$ deno compile --self-extract main.ts
# Результат: ./main — меньший размер загрузки
Более полная автоматическая инструментация: HTTP-серверы, клиенты баз данных, экспортёр OTLP «из коробки».
Более быстрая компиляция WebAssembly, улучшенная сборка мусора, новые возможности JavaScript и оптимизация под современное оборудование.
// deno.json
{
"hooks": {
"resolve": "./resolve-hook.ts"
}
}
// resolve-hook.ts
export function resolve(specifier: string, context: ResolveContext) {
if (specifier.startsWith("my-company:")) {
return { url: `https://registry.my-company.com/${...}`, format: "module" };
}
return undefined;
}
Запустите deno audit для вашего package.json, чтобы проверить,
какие пакеты работают нативно. Большинство популярных фреймворков (Express, Koa, Hono,
Zod, Prisma) работают хорошо.
npm:Голые спецификаторы теперь разрешаются в npm автоматически.
Модель безопасности Deno требует явных разрешений. Для разработки подойдёт
--allow-all.
# Установка Deno 2.8
curl -fsSL https://deno.land/install.sh | sh
deno upgrade
# Проверка совместимости проекта
deno check main.ts
# Запуск с разрешениями
deno run --allow-read --allow-net --allow-env main.ts
# Использование в CI
deno ci
Deno 2.8 — убедительный выбор для:
Используете Deno? Смотрите мои услуги веб-разработки
import express from "express" теперь резолвятся в npm автоматически. Префикс npm: больше не нужен. Deno проверяет npm-реестры как цель разрешения по умолчанию наравне с URL-импортами и import maps.import defer — это новая возможность для ленивой загрузки модулей. Модули, объявленные с import defer, не загружаются и не выполняются при первоначальном запуске — они загружаются при первом использовании. В отличие от динамического import(), он синхронный. Это значительно улучшает производительность холодного старта для приложений со множеством зависимостей, особенно в serverless-среде.deno upgrade
Затем выполните deno --version чтобы убедиться, что у вас 2.8,
и начинайте изучать новые подкоманды. Официальная документация на
docs.deno.com содержит
подробные руководства по каждой новой возможности.
Если вы оцениваете рантаймы для нового проекта или рассматриваете миграцию и хотите получить опытную оценку, свяжитесь со мной. Я создаю production-приложения на различных JavaScript-рантаймах более 20 лет и помогу принять правильное решение для ваших задач.
Оцениваете Deno, Node.js или Bun для следующего проекта? Я помогу принять правильное техническое решение. Бесплатная консультация.