Node.js vs. Deno — что вам нужно знать

Дневник админа
Node.js vs. Deno - что вам нужно знать

Node.js vs. Deno: что вам нужно знать

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

В этой статье мы рассмотрим Deno и его «старшего брата», чтобы понять, что у них есть в общего и что их отличает.

Языковая поддержка

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

Node.js

Текущая версия LTS Node (v12.18.1 на на момент написания) поддерживает современный синтаксис и функции JavaScript. Он также поддерживает примерно 75% спецификаций ES2020. Модули ECMAScript также поддерживаются, но в настоящее время относятся к категории экспериментальных: используйте расширение файла .mjs или добавьте свойство type : module в файл проекта package.json .

Чтобы запустить TypeScript (или любой другой язык сценариев) на Node.js, код должен быть скомпилирован в JavaScript, который может запускать движок V8. Есть несколько разных способов сделать это с разными плюсами и минусами, поэтому вам нужно выбрать один из них и выполнить необходимые настройки, чтобы начать работу.

 

Не знаю ' Я не нашел упоминания о спецификации JavaScript, поддерживаемой Deno, но поскольку он также использует V8 «под капотом», я предполагаю, что уровень поддержки такой же, как и в Node.js. Мои собственные тесты показывают, что Deno поддерживает такие функции ES2020, как Promise.allSettled () и globalThis keyword. Модули ECMAScript используются по умолчанию, а модули CommonJS не поддерживаются, если вы не используют библиотеку совместимости узлов.

TypeScript поддерживается в Deno как первоклассный язык, что означает, что он работает из коробки: нет необходимости устанавливать дополнительные инструменты для преобразования в JavaScript. Конечно, движок V8 изначально не поддерживает TypeScript, поэтому Deno по-прежнему переводит код «под капотом», но для разработчиков все органично и прозрачно.

Я также не нашел упоминания о какая версия TypeScript Deno v1 использует .0.1, но поддерживает необязательные нулевые строки и конкатенацию (но не с полями частного класса), указывая на TypeScript 3. 7.

API

И Deno, и Node .js предоставляет разработчикам собственный API для создания программ, которые могут делать действительно полезные вещи, такие как чтение и запись файлов, а также отправка и получение сетевых запросов.

Node.js

Когда Node.js был впервые представлен, он не имел встроенной поддержки promis. В результате большинство API для асинхронных операций были написаны для приема обратного вызова при первой ошибке:

 const fs = require ('fs');
fs.readFile ('readme.txt', (err, data) = & gt; {
if (err) {
//Обработка ошибок
}
//иначе обработка данных
}); 

Хотя разработчики, использующие Node.js, теперь имеют доступ к обещаниям и синтаксису async/await, API по-прежнему ожидают, что обратные вызовы будут поддерживать обратную совместимость.

Node.js vs. Deno - что вам нужно знать

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

 try {
const data = await Deno.readFile ('readme.txt');
//обработка данных
} catch (e) {

//Обработка ошибок }

Команда разработчиков также решила везде использовать веб-стандарты.Где это было возможно, что означает, что он реализовал интерфейсы API браузера, где это было необходимо. DENO предоставляет глобальный объект Window и apis, такие как addeventListener и fetch. Особенно приятно иметь доступ к fetch, Потому что в Node.js вы должны использовать полификл или Сторонняя библиотека.

Модуль совместимости

deno предоставляет слой , который позволяет повторно использовать существующие node.js пакеты. Он еще не завершен, но в настоящее время поддерживает Commonjs End () модули.

Управление пакетами

Управление пакетами Это одна из областей, в которых Deno радикально отличается от подхода, реализованного в Node.js. Потому что Deno все еще находится в своих филиалах, окажется ли его подход, чтобы быть более эффективным.

Node.js

Как вы можете Знаете, узел. JS имеет свой собственный менеджер пакетов по имени NPM, который используется для установки и управления пакетами других компаний. NPM чаще всего используется в сочетании с онлайн-регистрам NPM , который содержит большинство доступных сторонних пакетов.

При использовании NPM для установки пакета в проекте , файл package.js используется для определения имени пакета и допустимого диапазона диапазона. Сам пакет (плюс все пакеты, из которых зависит) отправляется на папку Node_modules design.

 

deno полностью устраняет необходимость использования менеджера пакетов Отказ Вместо этого пакеты связаны непосредственно через URL:

 Import {Response} из "https://deno.land/std @ 0.53.0/http/server.ts"; 

Первый раз, когда вы запускаете код DOO, выбирает и компилирует все зависимости. Затем они буферируются в файловой системе отдельно от проекта, поэтому следующий запуск гораздо быстрее.

Как и NPM Package-lock.json, deno позволяет указывать Блокировка файла Чтобы использовать для использования для использования для использования для использования файла блокировки для использования для использования для использования. Убедитесь, что используются только зависимости, которые соответствуют точной версии, которую вы изначально импортировали.

 

боковые пакеты

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

node.js

Узел

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

 

, как мы говорили в Предыдущий раздел DENO активно пытается избежать необходимости использовать пакет или менеджер реестра, позволяя скриптам импортировать модули непосредственно из любого общедоступного URL. Конечно, трудно импортировать пакеты, если вы не знаете, что там, поэтому официальный сайт Deno опубликовал список совместимых сторонних модулей . На момент написания этого текста этот список имеет 707 модулей.

deno

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

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

Возможно, один из самых включенных улучшений DENO по отношению к Node.js — это система разрешений. Посмотрим, почему.

node.js

Начальный node.js очень либерал, давая код полный доступ к сетевой и компьютерной файловой системе.Если этот флажок не установлен, сторонний код может поставить под угрозу вашу систему.

 

Улучшение модели безопасности Это то, что Райан Даль специально поставил перед собой при создании Deno. По умолчанию весь код выполняется в безопасной среде песочницы. Это предотвращает доступ кода к таким вещам, как файловая система, сеть и переменные среды, если доступ специально не предоставляется через аргумент командной строки.

 # Разрешить скрипту делать сетевые запросы
обозначать run --allow-net server.ts 

Более того, если вы разрешаете доступ для чтения или записи к файловой системе или доступ к сети, вы можете предоставить белый список. Это означает, что вы сможете ограничить доступ для чтения/записи к папке данных проекта с помощью программного обеспечения Deno, например, ограничив потенциальное вредоносное повреждение.

Deno: «Батареи включены»

Ранее В заключение хотелось бы сказать еще кое-что. Если вы посмотрите раздел руководства инструменты , вы заметите, что Deno предоставляет нам несколько приятных «бонусов»! Следующие встроенные инструменты сделают работу программиста проще и приятнее:

packer : объединяет определенный скрипт его зависимости в один файл; debugger : позволяет отлаживать программы Deno с помощью Chrome Devtools, VS Code и других инструментов (примечание: Node. js также имеет отладчик); инспектор зависимостей : запуск его в ES модуль отобразит все зависимости в дереве; генератор документации : анализирует аннотации JSDoc в данном файле и распечатывает документацию; форматирование : автоматически форматирует JavaScript и TypeScript; механизм тестирования : может использоваться для тестирования кода JavaScript и TypeScript в сочетании с утверждениями в библиотеке по умолчанию. компоновщик : код компоновщика (в настоящее время нестабильный), который может помочь вам определить потенциальные проблемы с вашими программами.

Вердикт

Цель этой статьи не выбирает Node.js или Deno, а сравнивает и противопоставляет их. К настоящему времени вы должны понимать сходство между двумя средами выполнения и, что более важно, их различия.

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

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

Пожалуйста, оставьте свой отзыв по текущей теме материала. Большое спасибо за ваши комментарии, реакции, лайки, подписки

Оцените статью