Deno: среда выполнения JavaScript и TypeScript¶
Deno — среда выполнения (рантайм) для JavaScript и TypeScript, работающая на движке V8 и написанная на языке Rust. Создана Райаном Далом, автором Node.js, и впервые представлена в 2018 году. Основные особенности — встроенная поддержка TypeScript, безопасность по умолчанию, использование стандарта ES-модулей и единый исполняемый файл без внешних зависимостей.
¶Общие сведения
Deno позиционируется как современная альтернатива Node.js, устраняющая ряд архитектурных решений, которые автор счёл ошибочными. Рантайм распространяется как один бинарный файл, не требующий отдельной установки пакетного менеджера. Название образовано от сочетания слов Deno и Node (перестановка слогов).
Ключевые характеристики:
- исполнение кода на движке V8 (тот же, что в Chrome и Node.js);
- нативная поддержка TypeScript без предварительной компиляции;
- модель безопасности с явным предоставлением разрешений;
- модульная система на основе стандарта ECMAScript;
- встроенные инструменты: тестирование, форматирование, линтинг, сборка.
¶История
Проект анонсирован Райаном Далом в 2018 году на конференции JSConf EU в докладе «10 Things I Regret About Node.js». Первая публичная версия 1.0 вышла 13 мая 2020 года. В 2021 году появилась компания Deno Land Inc., занимающаяся коммерческой поддержкой проекта. Версия 2.0 выпущена в 2024 году и принесла изменения в систему конфигурации и управления зависимостями.
¶Модель безопасности
По умолчанию скрипт Deno не имеет доступа к сети, файловой системе, переменным окружения и подсистеме запуска процессов. Доступ предоставляется явно через флаги командной строки:
| Флаг | Предоставляемый доступ |
|---|---|
--allow-read | чтение файловой системы |
--allow-write | запись в файловую систему |
--allow-net | сетевые запросы |
--allow-env | переменные окружения |
--allow-run | запуск подпроцессов |
-A / --allow-all | все разрешения сразу |
Разрешения можно ограничивать конкретными путями или доменами, например --allow-net=example.com. Такой подход снижает риск выполнения вредоносного кода из сторонних источников.
¶Управление зависимостями
Deno не использует каталог node_modules и файл package.json в классическом виде. Зависимости подключаются напрямую по URL через инструкцию import:
`` import { serve } from "https://deno.land/std/http/server.ts"; ``
Модули кэшируются локально после первой загрузки. Для воспроизводимости сборок применяется файл блокировки deno.lock, фиксирующий версии и контрольные суммы. С версии 2.0 развивается реестр JSR (JavaScript Registry), ориентированный на TypeScript-пакеты.
¶Инструменты
Deno включает набор утилит, доступных без установки дополнительных пакетов:
deno run— запуск скриптов;deno test— встроенный тест-раннер;deno fmt— форматирование кода;deno lint— статический анализ;deno compile— сборка автономного исполняемого файла;deno bench— бенчмарки;deno doc— генерация документации.
Встроенный форматтер и линтер устраняют необходимость в конфигурации сторонних инструментов вроде ESLint и Prettier.
¶Стандартная библиотека
Стандартная библиотека (std) распространяется отдельно от рантайма и следует принципу минимализма: в неё входят модули для работы с файлами, HTTP, кодированием, тестированием и асинхронными утилитами. В отличие от Node.js, стандартная библиотека не встраивается в ядро, что упрощает её независимое версионирование.
¶Совместимость с Node.js
Начиная с версии 1.28 Deno поддерживает частичную совместимость с экосистемой Node.js: встроенные модули (node:fs, node:path и другие) и пакеты из npm подключаются через префиксы node: и npm:. Это позволяет постепенно переносить существующие проекты. Полная совместимость не гарантируется из-за различий в архитектуре.
¶Применение
Deno используется для:
- серверных приложений и API на TypeScript;
- скриптов автоматизации и инструментов командной строки;
- edge-вычислений на платформах вроде Deno Deploy;
- образовательных задач благодаря строгой типизации и простой настройке.
¶Критика и ограничения
К числу недостатков относят меньшую зрелость экосистемы по сравнению с Node.js, ограниченную совместимость с npm-пакетами, зависимость от внешних URL при импорте модулей и необходимость явного управления разрешениями, что усложняет простые сценарии. Часть разработчиков отмечает фрагментацию между Deno, Node.js и Bun — ещё одним конкурирующим рантаймом.
IRONLIVE — база данных и аналитика по компаниям России.
На главную IRONLIVE →