Deno - это среда выполнения JavaScript (JS), написанная на Rust и предлагающая новые функции и современную настройку. Основной релиз был опубликован в конце октября этого года. Хорошая возможность узнать, что такое Deno, каковы его основные функции и как работает Deno.

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

История

Райан Даль или хотя бы один из его проектов должны быть знакомы большинству JS-разработчиков, потому что он является отцом Node и с начала 2018 года у него появилось новое детище - Deno. Родство между обеими идеями Даля безошибочно: «Дено» - это просто аббревиатура от «Узел». Он также демонстрирует сходство со своим старшим братом с Deno, а также серверной средой выполнения JS с использованием движка Google V8.

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

«Ошибки», которые он сделал с Node, резюмируются следующим образом:

  • Нет собственных обещаний: не используются собственные обещания, а используются обратные вызовы. Можно использовать обещания и async / await, но это реализуется функциями-оболочками. Внутри все по-прежнему работает с обратными вызовами
  • Излишняя сложность, например система загрузки модулей через index.js; index.js поддерживался избыточно, поскольку требовал package.json. С node_modules у вас есть не только одна зависимость, но зависимость также может зависеть от другой зависимости. Это подводит нас к следующему пункту.
  • Огромные node_modules: node_modules могут быть очень большими в любом проекте Node, потому что зависимость может полагаться на другую зависимость и так далее. Это также называется «адом зависимости». Каждый JS-разработчик наверняка знает этот мем:

  • Отсутствие безопасности: каждый модуль может получить доступ к файловой системе или сети хост-системы и нанести ей значительный ущерб. Этот момент становится еще более важным, если учесть, что практически любой может загрузить модуль без предварительной проверки безопасности в системе репозитория, npm.
  • Система репозитория Vendorlock через npm: npm - это квази-стандарт для узловых модулей, и поэтому нет другого способа публиковать модули узлов, кроме как через npm. Это монопольное положение npm означает, что большинство модулей публикуется на npm. Среди этих модулей можно найти не только лучшие модули.

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

Функции

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

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

- allow-write Allow Write access
- allow-read Allow Read System access
- allow-network Allow Network access
- allow-env Allow Environment access
- allow-plugin Allow Loading plugins
- allow-hrtime Allow High resolution time measurement
- allow-run Allow Subprocesses
- a Allow all permissions

Первый класс TypeScript

Для более крупных JS-проектов в большинстве случаев используется TypeScript (TS). В этом случае полезно, чтобы Deno по умолчанию поддерживал TS, потому что в этом случае не требуется дополнительных действий для запуска TS в проекте Deno. Однако Deno не заставляет вас писать в TS, но дает вам свободу писать в JS ad.

WASM первого класса

По умолчанию Deno может запускать двоичный файл WASM. WASM означает WebAssembly. Он позволяет писать модули на языках, которые традиционно используются в серверной части, и запускать их в браузере. Пока поддерживаются Rust, C / C ++ и C #. Модули для сложных или трудоемких вычислений могут быть написаны на C / C ++ и будут работать быстрее, чем сопоставимые реализации JS.

Первый класс ждут

Когда был введен async / await, await нельзя было использовать, если во внешней функции не было async. В противном случае вы получите SyntaxError. Тогда большинство людей написали функцию-оболочку с async перед ней. Для Deno это не обязательно, потому что Deno поддерживает await верхнего уровня.

Нет блокировки поставщика репозитория

Для Deno больше нет централизованной системы управления пакетами и, следовательно, нет блокировки от поставщика для модулей ES. Модули загружаются через URL. Затем Deno кэширует этот модуль, чтобы к нему можно было получить доступ для другого проекта или когда URL-адрес отключен.

Большая стандартная библиотека

Deno предлагает стандартную библиотеку, которая предоставляет такие модули, как fs (файловая система), ws (веб-сокеты), hash (шифрование), encoding (кодирование и декодирование для разных форматов), path, io, datetime, http и т. Д. Это устраняет необходимость в импортировать дополнительные внешние модули, которые могут быть скомпрометированы.

Интегрированный инструмент тестирования

Он предоставляет инструменты для тестов, такие как различные утверждения, задержки, а также инструменты CLI для запуска определенных тестов.

Оценка

Следующее сравнение всегда относится к NodeJS:

Недостатки

  • Дено все еще в самом начале. Пока нет значимых проектов на базе Deno. Так что у нас недостаточно опыта работы с Deno в производственном коде. Также экосистема Deno по-прежнему маргинальна по сравнению с Node.
  • В Node вы можете обновить все модули с помощью одной команды npm install. Это невозможно с Deno.
  • Deno не поддерживает пакеты npm. Функциональные возможности пакетов npm необходимо переписать для Deno.

Преимущества

  • Модули в Deno кэшируются как квазиневидимые node_modules. Это означает, что у вас все еще есть огромный файл с модулями. Но иметь одну центральную папку модулей для всех проектов все же лучше, чем иметь одну огромную папку модулей для каждого проекта.
  • Стандартная библиотека обеспечивает более высокий уровень безопасности. Модули из стандартной библиотеки изображений имеют низкую вероятность взлома. Стандартная библиотека также основана на Deno, т.е.не требуются внешние зависимости и, следовательно, меньше риск внесения вредоносного модуля в проект.
  • Deno написан на Rust и TS - оба языка становятся все более популярными среди разработчиков.
  • Deno использует новейшие функции ECMAScript во всех своих API и стандартной библиотеке. Эта согласованность отсутствует в Node.
  • Deno обеспечивает дополнительный уровень безопасности. Только если вы установили соответствующие разрешения, вам разрешен доступ к конфиденциальным частям хост-системы.
  • Bon u s: В настоящее время команда Deno работает над возможностью скомпилировать программу Deno в исполняемый файл, который может выполняться без внешних зависимостей, подобно Go. Работа еще продолжается. О ходе работ Вы можете узнать здесь.

Заключение

Дено - детище Райана Даля, и его мотивировали ошибки, которые он допустил с Node. Deno использует другой подход во многих аспектах и ​​использует новейшие функции ES. Еще неизвестно, лучше ли все это, чем Node.

Термин Deno как родственник Node может показаться банальным, но он попадает в самую точку: Deno не хочет заменять Node, а предлагает альтернативу. Deno все еще находится в зачаточном состоянии. Посмотрим, как он вырастет.

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

Эта статья была впервые опубликована на немецком языке в слегка измененном виде в моем блоге компании