«Безопасная по умолчанию» среда выполнения для JavaScript и Typescript

Deno (анаграмма Node), среда выполнения JavaScript / TypeScript, обещающая более высокий уровень безопасности и превосходные возможности для разработчиков по сравнению с Node.js, достигла статуса версии 1.0 13 мая 2020 года. Проект стал общедоступным около двух лет назад.

Deno, созданный Райаном Далем, который также создал Node.js, был разработан для устранения ряда недостатков Node, в частности, безопасности.

Замечательный доклад Райана по этому поводу можно найти здесь:

Https://www.youtube.com/watch?v=M3BM9TB-8yA

Некоторые из особенностей Deno:

  • Deno - это среда выполнения для выполнения JavaScript и TypeScript вне браузера в одном исполняемом файле (denocode).
  • Deno по умолчанию безопасен, без доступа к файлам, сети или среде, если явно не включен. Пользователи могут подписаться с помощью флагов: ––allow-net, ––allow-write.
  • Deno умирает при неперехваченных ошибках.
  • Все асинхронные действия в Deno возвращают обещание.
  • Deno предоставляет набор проверенных стандартных модулей.
  • Deno поддерживает ожидание верхнего уровня.

В сравнении с NodeJS:

  • Deno не использует npm. Он использует модули, указанные как URL-адреса или пути к файлам.
  • Deno не использует package.json в алгоритме разрешения модулей.
  • Использует «модули ES» и не поддерживает require(). Сторонние модули импортируются через URL:

импортировать * как журнал из «https://deno.land/std/log/mod.ts ';

Установка

Некоторые шаги по установке для windows и macOS:

Используя Chocolatey (Windows):

$ choco install означает

Используя Homebrew (macOS):

$ brew install означает

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

Вы можете проверить версию после установки с помощью deno --version. Конкретные команды и подкоманды доступны с deno --help.

Примеры

1. Базовый машинописный текст

Создайте новый файл helloDeno.ts в своем любимом текстовом редакторе и введите следующий код:

let str:string;
str = 'hello Deno';
console.log(str);

Поскольку NULL поддерживает машинописный текст из коробки, мы можем запустить его напрямую в нашем терминале. Вы можете запустить его с помощью deno run helloDeno.ts, который должен вывести hello Deno.

Вот как легко начать работу с динамом. Конфигурация машинописного текста не требуется.

2. Создание сервера

Это пример простого сервера, который принимает соединения через порт 8000 и возвращает клиенту все, что отправляет.

Создайте новый файл server.ts.

import { serve } from "https://deno.land/[email protected]/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
    req.respond({ body: "Hello World\n\" });
}

Вы можете заметить здесь необычный способ импорта. Как упоминалось ранее, он использует модули, указанные как URL-адреса или пути к файлам.

Запустите программу с deno run server.ts

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

Попробуйте еще раз с правильным флагом разрешения:

deno run --allow-net server.ts

Не добавляйте в команду флаг --reload . Я просто добавил его сюда, чтобы показать, что программа загружает и кэширует все файлы с URL-адреса, указанного в первой строке программы. Это сделано для того, чтобы в следующий раз, когда он запустит программу, ему не нужно будет снова подключаться к сети, чтобы снова получить файлы. Вы можете более или менее рассматривать кеш здесь как замену node_modules (но не строго).

Теперь ваш сервер должен быть запущен. Теперь вы можете перейти к localhost: 8000 в своем браузере, чтобы увидеть результат.

Гид по стилю

Некоторые из основных рекомендаций от den включают:

В именах файлов используйте подчеркивания, а не тире.

Пример: используйте file_server.ts вместо file-server.ts.

Добавьте тесты для новых функций.

Каждый модуль должен содержать или сопровождаться тестами на его общедоступную функциональность.

Функции верхнего уровня не должны использовать синтаксис стрелок.

Функции верхнего уровня должны использовать ключевое слово function. Синтаксис стрелок должен быть ограничен закрытием.

Плохо

экспорт const foo = (): string = ›{
return bar;
};

Хорошо

функция экспорта foo (): string {
return bar;
}

Расширение для VSCode

Кроме того, если вы используете VSCode, вы можете использовать плагин, который поддерживает NEMP. Его можно ввести justjavac - вы можете просто выполнить поиск по расширению в VSCode.

Теперь большой вопрос. Действительно ли Deno заменяет Node?

Стоит отметить и иметь в виду, что NodeJS используется огромными компаниями. Он существует уже так давно с огромной экосистемой, и существует множество проектов, веб-сайтов и пакетов, созданных с помощью NodeJS и его довольно зрелой, развитой среды выполнения. Так что это не ново и полно ошибок; вместо этого он готов к производству и используется много раз, поэтому NodeJS никуда не денется.

Конечно, тебе не нужно забирать это у меня; вы можете взять это у самого Райана.

Заключительные мысли

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

Ресурсы

Https://deno.land/

Https://github.com/denoland/deno

Https://www.youtube.com/watch?v=3Vl8a3zYjiw