- PVSM.RU - https://www.pvsm.ru -
Создатель Node.js Райан Даль выпустил новую платформу, которая рассчитана на решение многих проблем Node.js. Возможно, вашей первой реакцией на эту новость будет: «О, отлично, очередной JS-фреймворк? Его мне только и не хватало…». Я отреагировал на эту новость точно так же. А вот после того, как я немного вник в особенности Deno, я понял причины, по которым Deno можно назвать в точности тем, что серверным JavaScript-разработчикам нужно в 2020 году.
Сравним Deno и Node.js и рассмотрим 5 основных причин того, что хорошего способна дать разработчику эта платформа. В частности, речь идёт о том, что, благодаря Deno, в распоряжении того, кто раньше использовал Node.js, окажется более удобный и современный инструмент.
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-модулей даёт разработчику два серьёзных преимущества:
import можно избирательно загружать из пакета лишь то, что нужно. Это помогает экономить память.require загрузка модулей выполняется синхронно. А механизм import загружает модули в асинхронном режиме, что улучшает производительность.
Если вы внимательно прочли вышеприведённые фрагменты кода, вы могли обратить внимание на то, что в Deno-примере пакет moment импортируется из URL. А это ведёт нас к следующему преимуществу Deno перед Node.
При использовании 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 [2]. Выглядит это, как мы уже видели, так:
import { moment } from "https://deno.land/x/moment/moment.ts"
В деле работы с пакетами у Deno есть ещё одно огромное преимущество перед Node.js. Оно заключается в том, что каждый пакет, после установки, кэшируется на жёстком диске. Это означает, что установка пакета производится лишь один раз. Если в некий проект нужно импортировать зависимость, которая уже была импортирована в другой проект, соответствующий код не придётся загружать повторно.
Для того чтобы писать на TypeScript под Node.js, придётся выполнить достаточно длительный процесс настройки рабочей среды. Нужно установить TypeScript, обновить package.json, обеспечить поддержку типов в модулях.
В Deno, для того чтобы обеспечить работоспособность TypeScript-кода, достаточно сохранить файл с таким кодом, использовав расширение .ts вместо .js. Компилятор TypeScript встроен в Deno.
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-приложения включают в себя множество асинхронных функций. В результате можно сказать, что это улучшение делает код значительно чище и проще.
Для того чтобы выполнять 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.js. Например, Deno, в своём стандартном виде, безопаснее. В среде Deno можно выполнять Wasm-код, тут имеется множество встроенных библиотек.
Все те сильные стороны Deno, о которых шла речь в этой статье, взаимосвязаны. Все вместе они формируют ту среду, которую можно назвать более современной, чем Node.js, средой для разработки бэкенд-проектов. Я — React-разработчик, особенности Deno тесно переплетаются с моими потребностями. Теперь, создавая серверный код, я могу пользоваться ключевым словом import, могу где угодно ставить await. Я могу писать на TypeScript, ничего специально не настраивая, могу пользоваться Fetch, не устанавливая никаких дополнительных пакетов. Моя работа становится проще.
Станет ли Deno, в итоге, заменой Node? Возможно. Вероятно, это может занять несколько лет. Экосистема Node.js огромна, Deno понадобится время на то, чтобы вырасти до таких масштабов.
JavaScript-разработчики уже используют Deno в своих новых проектах. Поэтому, если вы сейчас собираетесь начать работу над чем-нибудь новым, вам, определённо, стоит взглянуть на Deno [3].
А вы уже попробовали Deno?
Автор: ru_vds
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/353540
Ссылки в тексте:
[1] Image: https://habr.com/ru/company/ruvds/blog/504584/
[2] https://deno.land/x/moment/moment.ts: https://deno.land/x/moment/moment.ts
[3] Deno: https://deno.land/
[4] Image: http://ruvds.com/ru-rub?utm_source=habr&utm_medium=perevod&utm_campaign=deno-vmesto-node#order
[5] Источник: https://habr.com/ru/post/504584/?utm_source=habrahabr&utm_medium=rss&utm_campaign=504584
Нажмите здесь для печати.