Денол — среда выполнения JavaScript¶
Денол (Denol, также Deno) — среда выполнения (рантайм) для JavaScript и TypeScript, созданная на языке Rust на базе движка V8. Позиционируется как современная альтернатива Node.js с акцентом на безопасность, встроенную поддержку TypeScript и единый набор стандартных инструментов. Название образовано от сочетания слов «DEnO» и «Node». Проект распространяется с открытым исходным кодом под лицензией MIT.
¶История
Разработку Денола начал Райан Дал (Ryan Dahl) — создатель Node.js. В 2018 году он выступил с докладом «10 Things I Regret About Node.js», в котором перечислил архитектурные решения, которые считает ошибочными: отсутствие изоляции по умолчанию, централизованный менеджер пакетов npm, устаревшую систему модулей CommonJS и слабую интеграцию с TypeScript. Денол стал попыткой исправить эти недостатки с нуля.
Первая публичная версия 1.0 вышла 13 мая 2020 года. В 2021 году появилась компания Deno Land Inc., занявшаяся коммерческой поддержкой проекта и облачным сервисом Deno Deploy. Версия 2.0 выпущена в октябре 2024 года; она принесла стабилизацию встроенного пакетного менеджера и улучшенную совместимость с экосистемой npm.
¶Архитектура и устройство
Денол построен на движке V8 (том же, что используется в Chrome и Node.js), а системные вызовы и сетевой ввод-вывод реализованы на Rust через асинхронный рантайм Tokio. Такое разделение позволяет использовать безопасный и производительный низкоуровневый код.
Ключевые компоненты:
- Движок V8 — исполнение JavaScript.
- Rust-ядро — доступ к файловой системе, сети, процессам.
- TypeScript-компилятор — встроен, не требует отдельной настройки.
- Стандартная библиотека (std) — набор модулей, поддерживаемых командой проекта.
- Инструменты разработчика — форматтер, линтер, тест-раннер, бандлер.
Денол не использует package.json и node_modules по умолчанию: зависимости подключаются напрямую по URL или через импорт-карты.
¶Безопасность
Главная отличительная особенность — модель разрешений. По умолчанию скрипт не имеет доступа к файловой системе, сети, переменным окружения и подпроцессам. Доступ выдаётся явными флагами:
| Флаг | Назначение |
|---|---|
--allow-read | чтение файлов |
--allow-write | запись файлов |
--allow-net | сетевые запросы |
--allow-env | переменные окружения |
--allow-run | запуск подпроцессов |
Такая схема снижает риск выполнения вредоносного кода, попавшего из недоверенного источника.
¶Модули и зависимости
Денол придерживается стандарта ES-модулей. Импорт указывается с полным URL или путём:
``js import { serve } from "https://deno.land/std/http/server.ts"; ``
Модули кэшируются локально, что позволяет работать офлайн после первой загрузки. С версии 1.28 поддерживается файл deno.json для настройки задач и импорт-карт, а с версии 1.30 — частичная совместимость с npm-пакетами через спецификатор npm:. В Деноле 2.0 появился собственный реестр JSR (JavaScript Registry), ориентированный на TypeScript и ES-модули.
¶Инструменты
В отличие от Node.js, где форматтер, линтер и тест-раннер устанавливаются отдельно, Денол включает их в один исполняемый файл:
deno fmt— форматирование кода;deno lint— статический анализ;deno test— запуск тестов со встроенными средствами утверждений;deno bench— бенчмарки;deno compile— сборка автономного исполняемого файла;deno bundle— упаковка модулей.
Единый набор инструментов упрощает настройку проектов и снижает число зависимостей.
¶Применение
Денол используется для серверных приложений, API-сервисов, CLI-утилит, скриптов автоматизации и edge-вычислений. Платформа Deno Deploy позволяет разворачивать функции на распределённой инфраструктуре без управления серверами. Благодаря встроенной поддержке TypeScript среда удобна для быстрого прототипирования и учебных задач.
¶Сравнение с Node.js
| Критерий | Денол | Node.js |
|---|---|---|
| Язык ядра | Rust | C++ |
| TypeScript | встроен | через транспиляцию |
| Разрешения | по умолчанию запрещены | по умолчанию разрешены |
| Пакеты | URL, JSR, npm | npm |
| Инструменты | встроены | внешние |
| Модули | ES-модули | ES + CommonJS |
Денол не является полной заменой Node.js: экосистема npm значительно крупнее, а часть серверных библиотек пока несовместима.
¶Критика и ограничения
Отмечают меньшую зрелость экосистемы по сравнению с Node.js, неполную совместимость с некоторыми npm-пакетами и зависимость от централизованных реестров модулей. Модель разрешений иногда усложняет запуск существующего кода. Кроме того, проекты, активно использующие нативные аддоны Node.js, требуют доработки.
¶Интересные факты
- Денол назван частично в честь Node.js и частично как игра слов.
- Первая версия была представлена спустя два года после критического доклада автора о Node.js.
- Райан Дал также известен участием в создании других инфраструктурных проектов.
IRONLIVE — база данных и аналитика по компаниям России.
На главную IRONLIVE →