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.

Но сможет ли он когда-нибудь занять его место?

Время покажет.