5 главных причин того, что JS-разработчики будут использовать Deno вместо Node

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Создатель Node.js Райан Даль выпустил новую платформу, которая рассчитана на решение многих проблем Node.js. Возможно, вашей первой реакцией на эту новость будет: «О, отлично, очередной JS-фреймворк? Его мне только и не хватало…». Я отреагировал на эту новость точно так же. А вот после того, как я немного вник в особенности Deno, я понял причины, по которым Deno можно назвать в точности тем, что серверным JavaScript-разработчикам нужно в 2020 году.



Сравним Deno и Node.js и рассмотрим 5 основных причин того, что хорошего способна дать разработчику эта платформа. В частности, речь идёт о том, что, благодаря Deno, в распоряжении того, кто раньше использовал Node.js, окажется более удобный и современный инструмент.

1. Современные возможности JavaScript: ES-модули


Node:

const moment = require("moment")

Deno:

import { moment } from "https://deno.land/x/moment/moment.ts"

Если вы, как и я, являетесь React-разработчиком, то вы уже давно заметили, что синтаксис импорта пакетов в Node.js отличается от того, к чему вы привыкли. Дело тут в том, что платформа Node.js была создана давно, в 2009 году. С тех пор в JavaScript появилось много нового. Многое в языке было улучшено.

В React (и в Deno) используется современный синтаксис импорта зависимостей вида import package from 'package'. В Node.js же применяется конструкция const package = require(«package»).

Использование синтаксиса ES-модулей даёт разработчику два серьёзных преимущества:

  1. Благодаря использованию ключевого слова import можно избирательно загружать из пакета лишь то, что нужно. Это помогает экономить память.
  2. При использовании ключевого слова require загрузка модулей выполняется синхронно. А механизм import загружает модули в асинхронном режиме, что улучшает производительность.

Если вы внимательно прочли вышеприведённые фрагменты кода, вы могли обратить внимание на то, что в Deno-примере пакет moment импортируется из URL. А это ведёт нас к следующему преимуществу Deno перед Node.

2. Децентрализованное хранилище пакетов


При использовании Deno разработчик больше не привязан к NPM. Вы правильно меня поняли: больше никакого package.json. Каждый пакет загружается с использованием URL.

В Node.js, для того чтобы использовать пакет, нужно сначала установить его из NPM:

npm i moment

Далее, необходимо дождаться завершения установки, а уже после этого подключать пакет в приложении:

const moment = require("moment")

Кроме того, каждый раз, когда кому-нибудь будет нужно запустить ваш Node.js-проект локально, понадобится устанавливать все зависимости этого проекта из NPM.

В среде Deno пакеты импортируются с использованием URL. В результате, если в вашем проекте нужна библиотека moment, вам достаточно импортировать её с использованием URL https://deno.land/x/moment/moment.ts. Выглядит это, как мы уже видели, так:

import { moment } from "https://deno.land/x/moment/moment.ts"

В деле работы с пакетами у Deno есть ещё одно огромное преимущество перед Node.js. Оно заключается в том, что каждый пакет, после установки, кэшируется на жёстком диске. Это означает, что установка пакета производится лишь один раз. Если в некий проект нужно импортировать зависимость, которая уже была импортирована в другой проект, соответствующий код не придётся загружать повторно.

3. В Deno встроена поддержка TypeScript


Для того чтобы писать на TypeScript под Node.js, придётся выполнить достаточно длительный процесс настройки рабочей среды. Нужно установить TypeScript, обновить package.json, обеспечить поддержку типов в модулях.

В Deno, для того чтобы обеспечить работоспособность TypeScript-кода, достаточно сохранить файл с таким кодом, использовав расширение .ts вместо .js. Компилятор TypeScript встроен в Deno.

4. Поддержка await за пределами асинхронных функций


Node:

const fakeData = async () => {
    const data = await fetch("https://jsonplaceholder.typicode.com/todos/1");
    const result = await data.json();
}

Deno:

const data = await fetch("https://jsonplaceholder.typicode.com/todos/1");
const result = await data.json();

В Node.js ключевое слово await может быть использовано лишь в функциях, объявленных с использованием ключевого слова async.

В Deno можно использовать await где угодно, организуя таким образом ожидание поступления каких-нибудь результатов. Помещать await-конструкции в async-функции необязательно.

Почти все JavaScript-приложения включают в себя множество асинхронных функций. В результате можно сказать, что это улучшение делает код значительно чище и проще.

5. Доступ к браузерным API (Window, Fetch)


Для того чтобы выполнять HTTP-запросы средствами JavaScript, можно использовать API Fetch. В Node.js нет доступа к браузерным API. Это, в нашем примере, приводит к невозможности обращения к Fetch с использованием лишь стандартного функционала платформы. Сначала нужно установить соответствующий пакет:

npm i node-fetch

Затем его надо импортировать в свой код:

const fetch = require("node-fetch")

После этого можно выполнять соответствующие вызовы.

А у Deno есть доступ к объекту window. Это значит, что для использования того же API Fetch достаточно просто сделать так:

fetch("https://something.com")

Это относится и к использованию других браузерных API. Для работы с ними не нужно устанавливать никаких дополнительных библиотек.

Если скомбинировать это с возможностью использования await за пределами асинхронных функций, становится понятным то, как и почему Deno-код может оказаться проще, чем Node.js-код.

Node:

const fetch = require("node-fetch")

const fakeData = async () => {
    const data = await fetch("https://jsonplaceholder.typicode.com/todos/1");
    const result = await data.json();
}

Deno:

const data = await fetch("https://jsonplaceholder.typicode.com/todos/1");
const result = await data.json();:

Итоги: у Deno есть и другие преимущества перед Node


У Deno есть и множество других преимуществ перед Node.js. Например, Deno, в своём стандартном виде, безопаснее. В среде Deno можно выполнять Wasm-код, тут имеется множество встроенных библиотек.

Все те сильные стороны Deno, о которых шла речь в этой статье, взаимосвязаны. Все вместе они формируют ту среду, которую можно назвать более современной, чем Node.js, средой для разработки бэкенд-проектов. Я — React-разработчик, особенности Deno тесно переплетаются с моими потребностями. Теперь, создавая серверный код, я могу пользоваться ключевым словом import, могу где угодно ставить await. Я могу писать на TypeScript, ничего специально не настраивая, могу пользоваться Fetch, не устанавливая никаких дополнительных пакетов. Моя работа становится проще.

Станет ли Deno, в итоге, заменой Node? Возможно. Вероятно, это может занять несколько лет. Экосистема Node.js огромна, Deno понадобится время на то, чтобы вырасти до таких масштабов.

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

А вы уже попробовали Deno?

Источник: https://habr.com/ru/company/ruvds/blog/504584/


Интересные статьи

Интересные статьи

Сейчас я занимаюсь заменой моих cron-заданий на таймеры systemd. Я пользовался таймерами несколько лет, но обычно в тонкости их применения особо не углублялся, разбираясь лишь с тем, ...
Если честно, к Д7 у меня несколько неоднозначное отношение. В некоторых местах я попискиваю от восторга, а в некоторых хочется топать ногами и ругаться неприличными словами.
Предисловие У меня дома есть пара комплектов хороших советских акустических систем. Но техника эта довольная старая и просто не может включаться с пульта или автоматически, а постоянно подходи...
Тема статьи навеяна результатами наблюдений за методикой создания шаблонов различными разработчиками, чьи проекты попадали мне на поддержку. Порой разобраться в, казалось бы, такой простой сущности ка...
Некоторое время назад мне довелось пройти больше десятка собеседований на позицию php-программиста (битрикс). К удивлению, требования в различных организациях отличаются совсем незначительно и...