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

Deno — среда выполнения JavaScript и TypeScript

Deno — среда выполнения (рантайм) для JavaScript и TypeScript, созданная Райаном Далом, автором Node.js, и впервые представленная в 2018 году. Относится к классу серверных платформ для исполнения кода вне браузера. Ключевые характеристики: безопасность по умолчанию (доступ к файлам, сети и переменным окружения требует явного разрешения), встроенная поддержка TypeScript, единый исполняемый файл и менеджер зависимостей, работающий напрямую с URL. Распространяется под лицензией MIT.

История

Райан Дал анонсировал Deno в 2018 году на конференции JSConf EU в докладе «10 Things I Regret About Node.js», где перечислил недостатки Node.js: отсутствие изоляции, громоздкую систему модулей, централизованный реестр npm и слабую поддержку TypeScript. Название образовано от Node с перестановкой слогов.

Первая стабильная версия 1.0 вышла 13 мая 2020 года. Версия 1.28 (2022) добавила поддержку npm-пакетов, а 2.0 (октябрь 2024) — стабилизацию встроенных инструментов и расширение совместимости с Node.js. Проект развивается компанией Deno Land Inc.

Установка

Deno поставляется одним исполняемым файлом без внешних зависимостей. Основные способы установки:

ПлатформаКоманда
Windows (PowerShell)`irm https://deno.land/install.ps1 \iex`
macOS / Linux`curl -fsSL https://deno.land/install.sh \sh`
Homebrewbrew install deno
Dockerdocker run -it --rm denoland/deno

Проверка установки выполняется командой deno --version, которая выводит версии самого рантайма, движка V8 и TypeScript-компилятора.

Базовые команды

Интерфейс командной строки строится по схеме deno <подкоманда> [флаги]. Основные подкоманды:

  • deno run file.ts — запуск скрипта;
  • deno test — запуск тестов;
  • deno fmt — форматирование кода;
  • deno lint — статический анализ;
  • deno check — проверка типов;
  • deno compile — сборка автономного исполняемого файла;
  • deno task — запуск задач из deno.json;
  • deno install — установка глобальных скриптов.

Разрешения (permissions)

Модель безопасности — центральная особенность Deno. По умолчанию скрипт не имеет доступа к системе. Флаги разрешений:

  • --allow-read[=путь] — чтение файлов;
  • --allow-write[=путь] — запись файлов;
  • --allow-net[=хост] — сетевые соединения;
  • --allow-env — доступ к переменным окружения;
  • --allow-run — запуск подпроцессов;
  • --allow-all или -A — все разрешения.

Запрос можно выдать интерактивно или запретить через --deny-*. Флаг --no-prompt отключает интерактивные запросы.

Модули и зависимости

Deno использует стандарт ES-модулей и импортирует пакеты по URL:

``ts import { serve } from "https://deno.land/std/http/server.ts";; ``

Сторонние библиотеки размещаются на deno.land/x, JSR или любом HTTP-сервере. С версии 1.28 поддерживается импорт npm-пакетов через префикс npm:, например import express from "npm:express". Зависимости кэшируются локально; управление кэшем — команды deno cache и deno info.

Конфигурация

Файл deno.json (или deno.jsonc) задаёт параметры проекта: карту импортов, задачи, настройки компилятора и линтера. Пример:

``json { "tasks": { "start": "deno run --allow-net main.ts" }, "imports": { "std/": "https://deno.land/std@0.224.0/"; } } ``

Задачи запускаются командой deno task start.

Встроенные инструменты

Deno включает инструменты, которые в Node.js устанавливаются отдельно: форматтер (аналог Prettier), линтер (аналог ESLint), тест-раннер, бандлер и компилятор в исполняемый файл. Это снижает число зависимостей проекта. Инструменты настраиваются через deno.json и не требуют внешних пакетов.

Совместимость с Node.js

Начиная с версии 1.28 Deno поддерживает значительную часть API Node.js: модули fs, path, http, process, а также глобальные объекты Buffer и global. Пакеты из npm устанавливаются и работают через слой совместимости. Это упрощает миграцию существующих проектов, хотя полная совместимость не гарантируется.

Применение

Deno применяется для серверных приложений, утилит командной строки, скриптов автоматизации и edge-вычислений (платформа Deno Deploy). Благодаря встроенной поддержке TypeScript и отсутствию этапа сборки он удобен для небольших сервисов и прототипов. Модель разрешений делает его пригодным для запуска недоверенного кода.

Отличия от Node.js

  • TypeScript поддерживается изначально, без транспиляции.
  • Зависимости загружаются по URL, центральный реестр не обязателен.
  • Доступ к системе закрыт по умолчанию.
  • Форматтер, линтер и тесты встроены.
  • Единый исполняемый файл вместо менеджера версий.
  • Промисы и async/await применяются в стандартной библиотеке повсеместно.

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

Отмечают фрагментарность экосистемы по сравнению с npm, неполную совместимость с некоторыми нативными модулями Node.js и зависимость от внешних URL при импорте. Часть ранних решений (например, удалённые импорты) вызывала споры о воспроизводимости сборок; для этого введены файлы блокировки и JSR.

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

На главную IRONLIVE →