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` |
| Homebrew | brew install deno | |
| Docker | docker 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 →