Впервые о 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.