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

Node.js — это давно работающий фреймворк, который позволяет вам писать серверный код на JavaScript. Первоначально выпущенный в 2009 году, фреймворк значительно расширился и стал использоваться в последние годы.

У Deno есть различия в стиле форматирования, синтаксисе импорта и управлении пакетами, но один и тот же инженер создал эти конкурирующие фреймворки на одном и том же движке.

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

Особенности узла и дено

Спустя почти девять лет после выпуска Node его разработчик Райан Даль объявил о новом проекте: Deno. Там, где когда-то Node был единственным вариантом для серверного JavaScript, Deno предоставил нам альтернативу.

Node.js и Deno во многом очень похожи. Большинство различий между ними происходят под капотом. Там, где Node работает на движке JavaScript V8, Deno использует специально написанный движок, созданный на Rust, с упором на производительность.

instagram viewer

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

Импорт модулей: CommonJS vs. ЕС

Node.js по умолчанию использует модули CommonJS с синтаксисом require(). Node позволяет вам изменить это, изменив ваши файлы конфигурации, чтобы вместо этого использовать модули ECMAScript с синтаксисом import(), если они этого хотят.

// Это допустимый импорт модуля CommonJS в Node.js
вар _ = требовать("лодаш");

// Это действительный импорт модуля ECMAScript в Node.js
Импортировать _ отлодаш;

Существует некоторая ограниченная совместимость между двумя типами загрузки модулей ES, при этом некоторые модули ECMAScript можно включать с помощью синтаксиса require(). Каждый тип импорта обрабатывает модули немного по-разному, но любой из них будет работать в большинстве случаев.

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

Deno использует другой подход, когда речь идет о включении внешних модулей в проект. Deno использует синтаксис include() для всех модулей, однако, в отличие от импорта Node, модули, импортированные в Deno, могут поступать из любого места. Эти местоположения могут даже включать удаленные сети доставки контента (CDN).

// Это правильный оператор импорта в Deno
Импортировать" https://deno.land/x/[email protected]/dist/lodash.js";

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

Поддержка кода TypeScript

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

Сегодня настроить новый проект TypeScript или преобразовать существующий проект Node.js в TypeScript несложно, хотя и требует некоторого времени.

Добавление поддержки TypeScript стало настолько популярным, что большинство современных фреймворков теперь имеют ту или иную поддержку TypeScript. Angular лидировал с готовой поддержкой TypeScript. Сегодня даже В React есть методы для настройки поддержки TypeScript.

Deno был разработан с включенной поддержкой TypeScript, чтобы помочь повысить вашу производительность. Благодаря встроенной поддержке TypeScript Deno не хватает даже минимальной настройки, необходимой Node.js для разработки типизированного кода JavaScript.

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

Линтинг для создания более чистого кода

Node.js предлагает широкий выбор линтеров. Существует множество хорошо проработанных опций, которые можно быстро и легко установить и настроить. Однако, как и в случае с TypeScript, вам нужно немного поработать, чтобы начать работу с выбранным линтером.

Deno пошла по другому пути в форматировании кода, предложив собственное встроенное решение для линтинга файлов .js, .ts и .md. Запуск команды «deno fmt» автоматически отформатирует все файлы в текущем рабочем каталоге.

Если вы не являетесь поклонником линтера по умолчанию, есть возможность установить и запустить выбранную вами систему форматирования, как если бы вы использовали Node. Переключение систем простое, поскольку линтер Deno запускается с помощью внешней команды, а не как часть конвейера сборки по умолчанию.

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

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

Менеджер пакетов Node (npm) очень известен среди современных разработчиков. Основываясь на успехе подобных систем, таких как Pip от Python и RubyGems от Ruby, npm быстро завоевала популярность.

Затянувшиеся проблемы приводят к развитию конкурирующих менеджеров, таких как pNPm и Yarn. В некоторых ситуациях вы даже можете установить и использовать несколько менеджеров пакетов с Node.

Сегодня, если вы решите разрабатывать на Node.js, вы несколько избалованы выбором, когда дело доходит до управления пакетами. Node может похвастаться процветающей экосистемой с множеством вариантов установки пакетов. В настоящее время в основном реестре npm их более 1,3 миллиона.

Npm позволяет публиковать собственные пакеты, ведущий к ошеломляюще большой библиотеке.

Deno применил совершенно другой подход к управлению пакетами. Он не имеет и не требует системы управления пакетами. Вместо этого Deno позволяет напрямую импортировать внешние библиотеки не только из системы разработчика, но и из любого места, которое принимает HTTP-запросы.

Это позволяет вам импортировать библиотеки из репозитория Deno или любой сети CDN прямо из их кодовой базы.

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

Участие сообщества в Node и Deno

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

Сама платформа имеет полностью открытый исходный код, поддерживается OpenJS Foundation и многими участниками.

Deno выпущен в 2018 году, почти через 9 лет после Node. Он был в основном разработан Райаном Далом для решения проблем и сожалений, которые он испытал при внедрении Node. Сегодня Deno также имеет открытый исходный код под лицензией MIT.

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

Проблемы производительности двух фреймворков

Для программистов, интересующихся относительными различиями в производительности между двумя фреймворками, разница между ними незначительна. Специализированный движок Deno, написанный на Rust, перекрывает базовую структуру, которая по-прежнему является движком V8. В конечном счете, и Deno, и Node почти во всех случаях сопоставимы по производительности.

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

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

Node против Deno: какой правильный выбор?

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

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