Некоторое время назад я сделал сообщение о типичной среде выполнения JavaScript Node.js, разработанной Райаном Далем. Сегодня я представлю еще одну среду выполнения JavaScript, Deno, которая, как ни странно, также была создана Райаном Далем (это объясняет название Deno, которое является анаграммой для Node). На момент написания этого блога Deno существует всего 8 месяцев, но некоторые уже предполагают, что однажды он может сделать Node.js устаревшим. Давайте углубимся в основы Deno и сами посмотрим, о чем идет речь.

Другая среда выполнения? Почему?

Давайте начнем с понимания того, почему вообще был создан Deno. Райан Даль представил эту многообещающую технологию как возможную замену Node.js, сделав акцент на слове «возможный». Deno все еще находится на начальной стадии своей карьеры, и у него есть время, прежде чем он сможет затмить своего старшего брата Node.js.

Итак, для достижения каких целей был создан Deno? По словам Даля, в своем знаменитом выступлении 2018 года 10 вещей, о которых я сожалею о Node.js, который вы можете посмотреть здесь, Deno пытается решить проблемы Node, когда речь идет, среди прочего, о таких вещах, как безопасность и производительность.

Безопасность

В отличие от Node, Deno по умолчанию выполняет код в песочнице, что означает, что среда выполнения не имеет доступа к сети, файловой системе, переменным среды или выполнению других сценариев, если не дано явное разрешение.

Продуктивность

Вы можете многого добиться с помощью экосистемы инструментов разработчика Node.js, но она становится неуклюжей и очень быстро фрагментируется. Что, если бы мы могли использовать пакеты без необходимости иметь дело с модулями узлов и package.json?

Эта проблема - одна из самых важных особенностей Deno. В отличие от Node, Deno сразу же поддерживает TypeScript без необходимости использования ручного компилятора.

С Deno вы не импортируете что-либо из модуля http и вам не нужно ничего устанавливать npm, вы просто импортируете свои зависимости с веб-сервера по URL-адресу. Использование URL-адресов означает, что можно полностью отказаться от централизованного реестра, такого как npm.

Все импортированные модули загружаются и кешируются при запуске приложения. Deno не загрузит их снова, если не попросит --reload command.

Обратной стороной этого подхода к импорту кода через URL-адрес является то, что веб-сайт, на котором размещена зависимость, может отключиться в любой момент. Даль и его команда рекомендуют снизить этот риск, проверив кеш всех загруженных модулей в git или любой другой системе управления версиями, которую вы используете, и сохранив ее в своем репозитории, чтобы у вас все еще был доступ к загруженной версии пакета, даже если она сайт выходит из строя.

Наконец, без package.json, как нам управлять версиями пакетов? Управление версиями пакетов сводится к простой установке версии в URL-адресе, например.

https://unpkg.com/[email protected]/dist/liltest.js.

Вот пример запуска простого сервера с Node. Мы используем модуль http, который является частью Node.js, мы создаем сервер, мы начинаем прослушивать порт, и все готово. Ничего особенного.

Давайте посмотрим, как это будет выглядеть по-другому с Deno.

Нет необходимости устанавливать какие-либо модули в npm, мы импортируем службу прямо с URL-адреса. Deno также поддерживает современные функции JavaScript, такие как обещания. Если вы хотите использовать ожидание, вам не нужно заключать код в асинхронную функцию; Deno прочитает ключевое слово await и выполнит его не только в рамках асинхронной итерации, но и в простых ванильных обещаниях.

В итоге,

Deno по-прежнему относительно горяч в прессе, но уже покоряет развивающийся мир. Когда Райан Даль создавал Node.js в 2009 году, он не ожидал роста популярности и использования, с которыми он столкнется, или связанных с этим проблем с безопасностью и централизацией, которые возникнут на этой платформе. Deno - это ответ Даля на эти проблемы, и независимо от того, готовы вы оставить Node или нет, Deno был создан с намерением в конечном итоге заменить Node. Произойдет ли это изменение или нет и сколько времени это займет, покажет только время. Спасибо за прочтение!