Открыть сервис

Денол — среда выполнения 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
Язык ядраRustC++
TypeScriptвстроенчерез транспиляцию
Разрешенияпо умолчанию запрещеныпо умолчанию разрешены
ПакетыURL, JSR, npmnpm
Инструментывстроенывнешние
МодулиES-модулиES + CommonJS

Денол не является полной заменой Node.js: экосистема npm значительно крупнее, а часть серверных библиотек пока несовместима.

Критика и ограничения

Отмечают меньшую зрелость экосистемы по сравнению с Node.js, неполную совместимость с некоторыми npm-пакетами и зависимость от централизованных реестров модулей. Модель разрешений иногда усложняет запуск существующего кода. Кроме того, проекты, активно использующие нативные аддоны Node.js, требуют доработки.

Интересные факты

  • Денол назван частично в честь Node.js и частично как игра слов.
  • Первая версия была представлена спустя два года после критического доклада автора о Node.js.
  • Райан Дал также известен участием в создании других инфраструктурных проектов.

IRONLIVE — база данных и аналитика по компаниям России.

На главную IRONLIVE →