Вот, наконец, после довольно большой шумихи, вот и Deno, версия 1.0.0 была выпущена 13 мая, и в этой статье я хотел углубиться в Deno и изложить несколько интересных фактов, которые могут сыграть роль. в будущем Node.js.
Перво-наперво, что такое Deno?
Deno - это среда выполнения для JavaScript и TypeScript, основанная на движке JavaScript V8 и написанная на языке Язык программирования Rust, основанный на платформе Tokio (который обеспечивает асинхронную среду выполнения, необходимую для JavaScript).
Он был создан Райаном Далем, первоначальным создателем Node.js. Об этом объявил Дал в 2018 году во время своего выступления «10 вещей, которые я сожалею о Node.js» (ниже вы можете найти его выступление) и предназначен для исправления проблем проектирования в Node.js. Deno явно берет на себя роль как среды выполнения, так и диспетчера пакетов в рамках одного исполняемого файла, вместо того, чтобы требовать отдельной программы управления пакетами.
Недостатки дизайна Node.js
По словам Даля, Node.js страдает от трех основных проблем с дизайном:
- плохо спроектированная модульная система с централизованным распределением;
- множество устаревших API, которые необходимо поддерживать;
- и отсутствие безопасности.
Deno намерен решить все три проблемы…
Также важно учитывать тот факт, что API Node.js основан на обратном вызове, поскольку он был написан до обещаний и async / await. В Node для этого нет изменений, поскольку такое изменение было бы грандиозным, поэтому мы в основном придерживаемся обратных вызовов или обещающих вызовов API.
Deno безопасное исполнение
Способ, которым Deno улучшает безопасность по сравнению с Node.js, очень прост: по своей природе Deno не позволяет программе получать доступ к диску, сети, подпроцессам или переменным среды. Если вам нужно разрешить любой из них, вы можете отказаться от участия с помощью флага командной строки, например --allow-read=/tmp
или --allow-net=google.com
. Еще одно улучшение безопасности в Deno заключается в том, что он всегда умирает при неперехваченных ошибках, в отличие от Node.js, который позволяет продолжить выполнение после неперехваченной ошибки, что может привести к непредсказуемым результатам.
Следующее запускает базовый сценарий Deno без каких-либо разрешений на чтение / запись / сеть (режим песочницы):
deno run main.ts
Явные флаги необходимы для предоставления соответствующего разрешения:
deno run --allow-read --allow-net main.ts
Помимо флага --allow-write
для файловой системы, есть также флаги --allow-net
, --allow-env
и --allow-run
для разрешения сетевых запросов, доступа к среде и для запуска подпроцессов соответственно.
Почему именно модули Deno?
В Node.js вы загружаете модули CommonJS с помощью ключевого слова require
, и все они, как стандартные, так и сторонние, неявно поступают с npmjs.com. В Deno вы загружаете модули ES с помощью ключевого слова import
и явно указываете URL-адрес. Например:
import * as log from "https://deno.land/std/log/someModule.ts"; import { Logger } from "https://adesso.de/lib/logger.ts";
На первый взгляд вы можете вспомнить, что импорт в Node.js выглядит проще, но у использования стиля Deno есть несколько преимуществ. Модули Deno могут размещаться везде, где нет централизованного репозитория для сторонних модулей. Кроме того, модули всегда кэшируются и компилируются локально и не обновляются, если вы явно не запросите обновление.
Что делать, если сайт выйдет из строя?
Deno кеширует загруженные модули. Поскольку кеш хранится на нашем локальном диске, создатели Deno рекомендуют проверить его в нашей системе контроля версий (т.е. git) и сохранить в репозитории. Таким образом, даже когда сайт выходит из строя, все разработчики сохраняют доступ к загруженной версии. Следовательно, вы должны иметь возможность запускать программы Deno, которые уже есть на вашем ноутбуке, если все операции импорта были разрешены один раз, даже если вы находитесь в самолете без подключения к Интернету.
Следующий сценарий Deno реализует базовый HTTP-сервер:
Deno включает в себя набор новых функций современного JavaScript, таких как promises или async iterable. Если этот цикл выглядит странно, по сути, это цикл for, который позволяет просматривать бесконечный массив входящих данных и событий, бесконечный поток входящих запросов с сервера. Использование ofawait
вне асинхронной функции также связано с тем, что мы можем использовать ожидание верхнего уровня не только с использованием его с асинхронным итерабельным, но и с простыми ванильными обещаниями. По сути, продолжайте цикл до тех пор, пока источник данных сервер не скажет, что я закончил, данные больше не будут отправляться, что здесь, конечно, никогда не произойдет, а здесь.
Интегрированный TypeScript
Если вы также являетесь большим поклонником TypeScript, как и я, то Deno поможет вам, нет необходимости во внешних инструментах, по умолчанию Deno транслируется в JavaScript. Это делается внутри компании, поэтому не о чем беспокоиться.
Хотя по умолчанию Deno заботится о многом, вы можете перезаписать конфигурацию, используя свой собственный tsconfig.json
файл:
deno run -c tsconfig.json [your-script.ts]
По умолчанию используется строгий режим, поэтому о любых опрометчивых методах программирования будет немедленно сообщено.
Что теперь происходит с Node.js?
Хорошо. Node.js - это гигант, которым пользуются миллионы, существует в миллионах репозиториев, хорошо зарекомендовавшая себя, невероятно хорошо поддерживаемая технология с большим сообществом, которое, вне всяких сомнений, будет существовать очень долго.
Следует ли мне использовать Deno?
Узнавать что-то новое сложно, но также важно, чтобы разработчик продолжал изучать что-то новое. Мое предложение было бы заключаться в том, что если вы начинаете сейчас с серверного JS и еще не знаете Node и никогда не писали TypeScript, вам лучше начать с Node.js (важно учитывать, что огромное количество учебных материалов, которые вы можете найти для Node.js и уже существующих вопросов-ответов StackOverflow).
Но если вы уже знакомы с Node.js и TypeScript, я думаю, что, возможно, пришло время для небольших изменений, и знакомство с Deno с самого начала может быть очень многообещающим и полезным в долгосрочной перспективе.
Основные особенности Deno:
- Deno - это среда выполнения для выполнения JavaScript и TypeScript вне браузера в одном исполняемом файле.
- Deno по умолчанию безопасен, без доступа к файлам, сети или среде, если явно не включен.
- Deno умирает при неперехваченных ошибках.
- Все асинхронные действия в Deno возвращают обещание.
- Скрипты Deno могут быть объединены в один файл JavaScript.
- Deno Имеет встроенные утилиты, такие как инспектор зависимостей (
deno info
) и средство форматирования кода (deno fmt
). - Deno предоставляет набор проверенных стандартных модулей.
- Deno был разработан как серия ящиков Rust, чтобы обеспечить интеграцию на разных уровнях.
- Deno основан на современных возможностях языка JavaScript.
- Deno имеет обширную стандартную библиотеку
- В основе Deno лежит TypeScript, который дает огромное преимущество во многих отношениях, включая первоклассную поддержку TypeScript (вам не нужно отдельно компилировать TypeScript, Deno делает это автоматически)
- Deno использует модули ES
- В Deno нет менеджера пакетов
- У Deno первоклассный
await
- Deno как встроенный испытательный центр
- Deno стремится быть максимально совместимой с браузером, например, предоставляя встроенный
fetch
и глобальныйwindow
объект.
Заключение
Node.js великолепен и определенно останется фактическим стандартом в мире JavaScript. Но весьма вероятно, что мы постепенно увидим, что Deno станет более популярным благодаря его первоклассной поддержке TypeScript, современной стандартной библиотеке и многим другим функциям.
Но взамен всех хороших и приятных вещей, которые он предоставляет, если честно, возникнет огромная задолженность по переносу существующих модулей npm и кодовых баз, что, я думаю, является самым большим ограничением на данный момент. Что вы думаете о Deno?
Мир!
Примечание команды разработчиков Plain English
Вы знали, что у нас четыре публикации и канал на YouTube? Вы можете найти все это на нашей домашней странице plainenglish.io - проявите немного любви, подписавшись на наши публикации и подписавшись на наш канал YouTube!