Перевод статьи подготовлен в преддверии старта курса «Разработчик Node.js».



В Codegram мы любим экспериментировать с новыми технологиями, а Deno вышел всего неделю назад! Прочитайте статью, если хотите узнать об этой новой среде выполнения JavaScript и о том, что думает по этому поводу Codegram.

Возможно, вы уже слышали о Deno, а возможно нет, но сейчас интернет пестрит информацией о нем и на то есть причина! Появилась новая среда выполнения JavaScript с симпатичным динозавриком в качестве логотипа (некоторые считают, что на логотипе грустный носок, но нет…). Мы даже написали твит о нем за неделю до первого релиза, но, сказать по правде, мы впервые услышали о Deno еще два года назад после просмотра этого потрясающего выступления Райана Даля.

В этой статье мы поверхностно пробежимся по Deno и поделимся своими мыслями о нем. Приступим!

Hello Deno!


Deno – это среда выполнения JavaScript подобно Node. Чтобы его использовать, нужно сначала установить deno CLI. Для этого воспользуйтесь инструкциями для своей операционной системы на deno.land (наши комплименты доменному имени!). Deno – это не форк Node, он был создан с нуля на Rust. Я написал статью о Rust для программистов на JS, вы можете прочитать ее, если хотите узнать больше о языке!

После установки CLI вы можете запустить классическую программу «Hello, World!» следующим образом:

deno run https://deno.land/std/examples/welcome.ts

Мы запускаем TypeScript из коробки? Да! TS – желанный гость в Deno, поэтому вам не нужно больше ничего для запуска кода на TS. Вы можете запустить и код на JS, но я большой поклонник TS, поэтому о нем рассказал первым.

Имейте в виду, что код на Node не совместим с Deno. Однако прямо сейчас они работают над обеспечением совместимости, так что в будущем вы сможете использовать свои любимые пакеты NPM.

Есть еще вещь, которую стоить отметить – это то, что Deno по умолчанию – это песочница. То есть изначально у вас нет доступа к сети или файловой системе. Если вашей программе нужен доступ, вам нужно явно разрешить его (т.е. использовать --allow-net для выдачи сетевых привилегий).

Больше никаких package.json или node_modules
Кто в интернете еще не видел эту шутку?



Несмотря на небольшое преувеличение, в этой шутке все же есть доля правды. По мере роста вашего приложения растет и список зависимостей, и в конечном итоге вы получаете огромное дерево зависимостей. Проблема заключается в том, что у каждого приложения есть копия того package@version, который вы используете.
Одна из основных целей Deno – зеркальное отражение работы браузера. Когда вы хотите что-то импортировать в браузер, вы пишете тег <script> и используете URL-адрес. Deno работает как раз следующим образом:

import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
assertEquals("hello", "hello");
assertEquals("world", "world");
console.log("Asserted! ");

Согласен, выглядит это немного странно. Поскольку никакого package.json у нас нет, то нет никакого способа указать внешние зависимости, поэтому мы импортируем их, когда они нужны. При первом запуске Deno сам скачает файл и сохранит его в кэше. Вы можете указать флаг --reload, если хотите снова загрузить пакет.

Вероятно, у вас на эту тему возникнет множество вопросов (у меня они тоже были), поэтому приглашаю вас посетить эту страничку FAQ в руководстве Deno, чтобы получить больше информации по теме.

Среда выполнения, совместимая с API браузера


Еще одной важной целью Deno была совместимость с браузером, поэтому в нем присутствует набор функций, доступных из глобальной области видимости, таких как fetch или addEventListener. Также вы можете использовать глобальный объект window (тем не менее пока я рекомендую использовать globalThis). В документации вы можете узнать больше о глобальных функциях.

В среде выполнения также есть глобальный Deno для API, которые не являются веб-стандартом. Вы можете использовать его для низкоуровневых операций, таких как чтение файла, открытие TCP-сокета и т.д.

Богатая стандартная библиотека


Разработчики Deno создали коллекцию стандартных готовых к использованию модулей. Библиотека тоже хостится на домене deno.land, поэтому вы можете импортировать любой модуль в ваше приложение с помощью такого URL-адреса:

import { v4 } from "https://deno.land/std/uuid/mod.ts";

console.log(v4.generate());

Стандартная библиотека включает в себя множество полезных модулей, однако есть и много сторонних, и этот список пополняется каждый день. Есть и еще одна хорошая новость, вы можете импортировать любой модуль, размещенный на публичном URL-адресе, а это значит, что с таким же успехом вы можете импортировать модули с GitHub. У Deno есть сервис перезаписи URL-адресов, которым вы можете воспользоваться, чтобы сделать доступными ваши модули. Больше об этой механике вы можете узнать на этой странице.

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


Deno CLI также включает в себя встроенные инструменты для выполнения некоторых распространенных задач, таких как запуск тестов, например, или даже создание пакета! Значит ли это, что Deno может заменить jest, prettier и webpack? Скорее всего нет. Deno довольно новое решение и пока не обладает такой обширной экосистемой, но наличие всего этого инструментария, доступ к которому можно получить установив один бинарник, все же впечатляет.

Заключение


Запрыгивайте на эту волну хайпа! Я и вправду впечатлен Deno. После двух лет разработки и долгого пути к успеху новая среда выполнения JavaScript выглядит просто великолепно, и мне не терпится начать экспериментировать с ней. Node появился около 11 лет назад и стал новой вехой в истории JavaScript. Он сделал язык лучше, и я думаю, что мы достигли нового рубежа, пришло время Deno!



Узнать подробнее о курсе.