Deno - это безопасная среда выполнения для JavaScript и TypeScript (с официального сайта). Хорошее предложение, не правда ли?

Тогда что такое Node.js?

Node.js - это также среда выполнения JavaScript, построенная на движке JavaScript V8 Chrome. (С официального сайта Node.js)

Можно ли на основании приведенных выше утверждений сказать, что Deno и Node.js одинаковы? Да, это.

Так что разработчик, который дал Node.js, также разработал Deno в качестве альтернативы.

Что ж, Райан Дхал, создатель Node.js, сожалеет об этом, а Deno - это просто «лучшая версия Node.js» со всеми исправлениями.

Так что же, по мнению разработчика Node.js, не так?

Что не так с Node.js?

Самое главное: с Node.js все в порядке, и вам не следует переключаться только потому, что Deno существует.

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

Но есть пара слабых мест, которые можно было бы исправить, но они не имеют большого значения.

  • Node.js ориентирован только на Javascript и изначально не использует статические типы.
  • Синтаксис импорта очень специфичен для Node.js, а не того, что мы знаем из модулей ES.
  • Он не поддерживает современные функции Javascript, такие как Promises.
  • По умолчанию это небезопасно.

Последний пункт сложен и может быть неправильно истолкован.

Node.js позволяет создавать безопасные приложения, в этом нет никаких сомнений.

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

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

Как Deno решает эти проблемы?

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

Но Дено

  • По умолчанию поддерживает Typescript в отличие от Node.js - следовательно, это среда выполнения Javascript и Typescript.
  • Использует систему импорта модулей ES вместо собственной
  • Обладает такими современными функциями Javascript, как Promises.
  • По умолчанию это безопасно.

Давай попробуем это

Вы можете установить Deno, используя

curl -fsSL https://deno.land/x/install/install.sh | sh

Поддержка машинописного текста:

Вы можете написать обычный сценарий Javascript, но также можете переключиться на Typescript в любой момент, поскольку компилятор Typescript предоставляется по умолчанию.

let text: string;
text = “hello world”,
console.log(text);

Этот код завершится ошибкой при выполнении с Node.js, но работает с Deno.

Но это совершенно необязательно, но если вы хотите его использовать, вам не нужно настраивать собственный процесс компиляции проекта Typescript.

Поддержка модуля ES:

Node.js имеет собственную модульную систему

const http = require(‘http’);

Но когда дело доходит до современных веб-фреймворков, мы привыкли к другому формату.

import {http} from ‘some_node_module’;

Кроме того, в проектах Node мы используем npm для управления пакетами наших проектов. Этот инструмент загружает их и сохраняет в каталоге node_modules.

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

В Node.js, когда мы создаем веб-сервер, мы зависим от Express.js, и веб-сервер будет чем-то вроде

const express = require(‘express’);
const app = express();

Здесь require импортирует модуль из каталога node_modules.

Но Deno упрощает это

import {serve} from ‘https://deno.land/[email protected]/http/server.ts’;
const server = serve({ port: 3000 });

Это импортирует функцию serve из пакета server.ts из Интернета.

Deno автоматически загружает и кэширует этот пакет при первом запуске.

Современные возможности

Deno из коробки поддерживает современные функции Javascript, такие как обещания и асинхронные итерации.

Чтобы развернуть полный сервер

import {serve} from ‘https://deno.land/[email protected]/http/server.ts’;
const server = serve({ port: 3000 });
for await (const req of server) {
    req.respond(“Hello world!!!”);
}

Также это избавляет от необходимости заключать ожидание в асинхронную функцию.

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

Как уже упоминалось, Deno имеет встроенную систему безопасности.

Но это не означает, что приложения Deno всегда защищены.

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

Например, когда мы запускаем приложение

deno run server.ts

Когда вы запустите указанную выше команду, вы получите сообщение об ошибке

Compile file:///home/sharein/Desktop/deno_samples/server.ts
Download https://deno.land/[email protected]/http/server.ts
.
.
.
Download https://deno.land/[email protected]/http/http_status.ts
Download https://deno.land/[email protected]/bytes/mod.ts
error: Uncaught PermissionDenied: network access to “0.0.0.0:3000”, run again with the — allow-net flag
at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11)
at Object.sendSync ($deno$/ops/dispatch_json.ts:72:10)
at Object.listen ($deno$/ops/net.ts:51:10)
at listen ($deno$/net.ts:152:22)
at serve (https://deno.land/[email protected]/http/server.ts:261:20)
at file:///home/sharein/Desktop/deno_samples/server.ts:3:16

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

Скрипты выполняются только тогда, когда они выполняются как

deno run — allow-net server.ts

В этом случае - allow-net предоставляет разрешение на доступ к сети, аналогично вы можете предоставить разрешения для чтения (- allow-read) и записи (- allow -write).

Вывод

Если вы переключитесь на Deno, это полностью зависит от вас.

Но Deno версии 1.0 был выпущен недавно, и то, что это основной выпуск, еще не означает, что он готов к производству.

Он очень новый и находится в стадии активной разработки, и сейчас самое время погрузиться в экосистему его пакетов.

Мы не знаем, станет ли он заменой Node.js, только время может ответить на этот вопрос.