Впервые о Denojs было объявлено на JSconf 2018 Райаном Далом (создателем nodejs), где Райан упомянул о разочаровании, связанном с ошибками, которые он допустил при создании Nodejs, и о преимуществах denojs над nodejs. В этом посте мы попытаемся выделить преимущества, а также основные отличия в отношении nodejs.

Различия с Nodejs

обзор

Самая интересная особенность Deno (которую лично я люблю) — это возможность запускать TypeScript из коробки с нулевой конфигурацией, в отличие от Nodejs (посмотрите, как настроить TypeScript в Node). это делает код javascript более читаемым и понятным, хотя вы все равно можете запускать код javascript.

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

Denojs добавил флаги безопасности для запуска кода javascript, что предотвращает потенциальные нарушения безопасности. в отличие от nodejs, denojs запускает javascript без каких-либо разрешений на ресурсы, например, по умолчанию, когда вы запускаете код javascript с nodejs, у вас будет сетевое разрешение, в то время как в Deno вам нужно указать разрешения для доступа к сети через флаг:

deno запустить — allow-net net_client.ts

Подробнее о разрешениях deno читайте здесь (https://deno.land/manual/getting_started/permissions)

Импорт

Одним из самых больших изменений в Deno является способ импорта пакетов. В nodejs мы используем NPM для управления всеми библиотеками javascript нашего проекта, в Denojs это больше не работает, если вам нужно импортировать внешнюю библиотеку, требуется ссылка на пакет напрямую из URL-адреса, например:

импортировать { сервер } из https://raw.githubusercontent.com/apiel/adka_server/master/mod.ts;

* Лично мне это не очень нравится, потому что проще написать название библиотеки вместо url. В документации упоминаются карты импорта, это способ поместить псевдонимы/имена во внешние библиотеки, хотя на момент написания этого поста он доступен только в нестабильной версии. (подробнее об этом читайте здесь https://deno.land/manual/linking_to_external_code/import_maps)

В denojs при импорте нужно указать расширение файла (.js или .ts) например:

импортировать пример из «./example.ts»;

Еще одно большое изменение заключается в том, как denojs хранит библиотеки зависимостей, в настоящее время в nodejs все библиотеки проекта сохраняются в папке node_modules, что занимает ненужное дополнительное место на нашем жестком диске, в отличие от deno каждый раз, когда вы импортируете внешнюю библиотеку. берется из URL-адреса, а затем кэшируется на нашем компьютере, чтобы сделать импорт более эффективным.

В коде

Теперь в Deno по умолчанию включено ожидание верхнего уровня, что позволяет разработчикам определять функцию ожидания без оболочки асинхронной функции, например:

* Nodejs в последних версиях также поддерживает Top Level Await, но по умолчанию он не включен, чтобы включить его, нам нужно изменить расширение файла на .mjs и добавить флаг — Harmony-top-level-await, например:

узел — ожидание гармонии верхнего уровня index.mjs

Другая важная функция называется Отправить один исполняемый файл, что означает, что все наши внешние библиотеки объединены в один файл Javascript, например:

Заключение

Denojs все еще находится в своей первой официальной версии. Важно иметь в виду, что Deno не заменит Nodejs, это просто еще один вариант, который устраняет текущие проблемы и реализует уроки, полученные от автора узла js. Это имело свои преимущества, но также и недостатки, такие как несовместимость с node_modules или небольшое количество библиотек, доступных для Deno.