Deno 1.0 был выпущен 13 мая 2020 г.
Deno - последнее предприятие Райана Даля (да, как вы уже догадались, парня, создавшего Node.js).
Но это не просто очередной движок JavaScript. Он также из коробки поддерживает TypeScript - строго типизированный двоюродный брат JavaScript.
Установка Deno
В macOS вы можете установить Deno с помощью Homebrew - диспетчера пакетов программного обеспечения с открытым исходным кодом для macOS:
brew install deno
Вот GIF, который поможет вам лучше понять:
В Windows Chocolately служит альтернативой MacOS Homebrew:
choco install deno
В Linux с этим справится старый добрый curl:
curl -fsSL https://deno.land/x/install/install.sh | sh
После установки Deno можно запустить следующую команду, чтобы увидеть все доступные параметры командной строки:
deno --help
Результат выполнения вышеуказанной команды будет выглядеть примерно так:
Привет, Дено!
Вы можете запустить Deno в режиме REPL (Read-Eval-Print Loop), просто выполнив следующую команду в Терминале / Powershell / Shell:
deno
Когда REPL станет активным, введите в командной строке следующий код и нажмите клавишу Enter / Return:
console.log('Hello, Deno!')
Вот что вы увидите:
Это все хорошо и прекрасно. Но это как и все остальные "Hello World!" программ там!
Давай повеселимся по-настоящему.
Посмотрим, сможем ли мы создать веб-сервер в Deno!
Использование сторонних / внешних пакетов
В Node.js, если вы хотите (или, скорее, должны) использовать стороннюю библиотеку в своем коде, вам сначала нужно установить ее с помощью npm, например:
npm i express
А затем вы импортируете его в свой код, используя это:
require('express')
Но Deno позволяет напрямую импортировать такие пакеты. Вам просто нужно указать URL-адрес пакета в своем коде. Посмотрим, как:
Запустите редактор nano и добавьте в него следующий код:
import { serve } from "https://deno.land/[email protected]/http/server.ts"; const s = serve({ port: 8000 }); console.log("https://localhost:8000/"); for await (const req of s) { req.respond({ body: "Hello World\n" }); }
Сохраните это в файле с именем server.ts
.
Выйдите из редактора nano или откройте новый терминал и выполните следующую команду:
deno run server.ts
С помощью приведенной выше команды сервер должен начать прослушивание порта 8000
.
Но вместо этого мы получаем следующее:
Что означает следующая ошибка на скриншоте выше?
error: Uncaught PermissionDenied: network access to "0.0.0.0:8000", run again with the --allow-net flag
Видите ли, вам нужно явно предоставить Deno разрешение на доступ к сети. Это одна из многих функций безопасности, встроенных в Deno (поэтому они называют ее безопасной средой выполнения).
Вы можете разрешить Deno доступ к сети, указав флаг командной строки --allow-net
deno run --allow-net server.ts
И вуаля! Сервер начинает прослушивать запросы на порт 8000.
Если вы посмотрите на следующую строку кода, вы заметите, что мы указали полный URL-адрес файлаserver.ts
, который содержит функцию serve()
, которую мы используем в нашем коде для прослушивания и обслуживания запросов на порту 8000
.
import { serve } from "https://deno.land/[email protected]/http/server.ts"
Нам не нужно было устанавливать его заранее npm
. Deno автоматически загружает его при выполнении вышеуказанного кода. Deno также загружает любые другие пакеты, которые могут потребоваться server.ts
, т.е. он также заботится о транзитивных зависимостях.
Это избавляет нас от необходимости запускать npm install
перед запуском наших программ.
Это что-то новое и уникальное для Deno (помимо необходимости явных разрешений, что мы видели раньше) и отличает его от Node.js.
Заключительные комментарии
Пока что Deno кажется хорошей альтернативой Node.js.
Но сможет ли он когда-нибудь занять его место?
Время покажет.