https://habr.com/ru/company/otus/blog/506004/- Блог компании OTUS. Онлайн-образование
- JavaScript
Перевод статьи подготовлен в преддверии старта курса «Разработчик 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!
Узнать подробнее о курсе.