Поиск по сайту:

Что такое Deno и чем он отличается от Node.js?


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

Основы

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

И Node.js, и Deno построены на основе движка JavaScript V8, используемого браузером Chrome. Node.js был основан в 2009 году, а Deno — в 2018. Оба проекта были созданы Райаном Далем. Deno — это попытка Даля переделать Node.js, используя уроки первых десяти лет.

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

Безопасность и разрешения

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

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

Процесс согласия для сценариев, которым действительно нужен доступ, предлагает выбор флагов командной строки или запроса разрешений во время выполнения. Флаги могут быть очень детализированными, например, --allow-read=/tmp для разрешения доступа файловой системы к одному каталогу. Это позволяет пользователям и администраторам ограничивать программы до минимально необходимого уровня доступа.

Децентрализованное управление пакетами

Нравится вам это или нет, но npm (менеджер пакетов узлов) для большинства стал неотъемлемой частью современной разработки JavaScript. npm — это отдельный проект Node.js, который теоретически можно распространять и с Deno. Однако Deno не включает его и не поддерживает использование пакетов из каталога node_modules.

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

import {anExport} from "https://example.com/example-package/a-module.ts";

Deno автоматически загружает и компилирует модуль при первом запуске программы. Затем он кэширует результат; точно так же, как npm install, программы Deno будут работать в автономном режиме после выполнения однократной загрузки.

Этот подход был выбран вместо централизованного распространения пакетов npm. Программы Node.js обычно неразрывно связаны с программным обеспечением в центральном реестре npm. Если бы npm был недоступен, разработчики по всему миру не смогли бы получить свои зависимости. Deno выступает за размещение модулей в любом месте, а произвольные URI HTTP становятся приемлемыми «реестрами».

Стандартная библиотека и Node.js Interop

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

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

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

Что я должен использовать?

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

В обозримом будущем Node.js, вероятно, по-прежнему будет лучшим выбором для программ JavaScript общего назначения. Доступно множество фреймворков, библиотек и руководств. Node не стоял на месте и последние несколько лет — теперь есть стабильная поддержка модулей ES6 и других языковых функций, таких как await верхнего уровня.

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

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

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

Краткое содержание

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

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

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

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