Анаграмма, да. Следующий узел? Посмотрим.

Node.js за последние несколько лет стал повсеместным в качестве серверного языка и общей среды выполнения Javascript. Поэтому, когда Райан Даль представил Deno.js в апреле 2019 года, люди были удивлены. О, если его имя звучит знакомо, это тот парень, который создал Node.js. Перед слайд-декой у него был следующий отказ от ответственности:

Этот доклад предназначен для опытных энтузиастов. Если это не вы: не паникуйте. Не обращайте внимания на этот разговор - используйте Node. Узел никуда не денется.

Разобравшись с этим, приступим.

В 2018 году Райан выступил с презентацией, в которой объяснил, каковы 10 основных недостатков его собственного создания Node - кто лучше подходит для этой работы? В конце он представил Deno, в основном его любимый проект и, в некотором роде, Node v2.0, если можно. Два года спустя после нескольких презентаций Deno 1.0 вышел 13 мая 2020 года.

Так что же такое Дено?

Согласно официальному сайту,

Deno - это простая, современная и безопасная среда выполнения для JavaScript и TypeScript, которая использует V8 и построена на Rust.

Итак, есть «простые», «современные» и «V8» из Node.js, но у нас есть и новые, и большие вещи - «безопасный», «машинописный» и «Rust». Deno предлагает готовую поддержку Typescript (вы только что сказали «Ура!»?), В отличие от Node, который изначально не предлагал поддержку TS, хотя для этого были средства. Кроме того, Deno написан на Rust, в отличие от Node, написанного на C ++. Ах да, «безопасный», который мы скоро обсудим.

Почему Deno, когда у нас есть узел?

Node был создан в 2009 году - более 10 лет назад. За прошедшее с тех пор десятилетие Javascript, а также вся экосистема вокруг него изменились до неузнаваемости. Promises, Async-Await и модули ES - это лишь верхушка айсберга. И да, как объяснил сам Райан, у Node есть проблемы, похожие на Python и Ruby - слабая модульная система, множество устаревших API-интерфейсов, которые необходимо поддерживать, и, самое главное, безопасность. Поэтому он решил, что настало время, чтобы появился язык сценариев лучшего класса.

В Deno Райан приложил сознательные усилия, чтобы исправить все недостатки Node:

  • В отличие от Node, которому требуется помощь NPM, Deno является собственным менеджером пакетов. Импорт стороннего кода или «пакетов» осуществляется через URL-адреса HTTP с использованием синтаксиса импорта ES, знакомого пользователям Angular или современного JS. Больше никаких «node_modules», ни «package.json». После получения пакеты кэшируются локально, поэтому их не нужно извлекать при каждом запуске. Посмотрите следующий пример:
import { serve } from “https://deno.land/[email protected]/http/server.ts";
  • Безопасность теперь по умолчанию, а не надстройка. Подобно тому, как приложения Android запрашивают разрешение на доступ к различным подсистемам, разрешение должно быть защищено с помощью определенных флагов командной строки. Это БОЛЬШОЕ улучшение по сравнению с Node.js, где среда выполнения имела неограниченный доступ абсолютно ко всему - чтение / запись в файловую систему, выполнение сетевых запросов, доступ к переменным среды и многое другое. Насколько это облегчает жизнь нам, разработчикам, это также означает, что любой внешний фрагмент кода (например, сторонние пакеты) тоже может делать все это. Если сценарию Deno требуется доступ для чтения к каталогу «/ etc», его необходимо запустить следующим образом:
deno --allow-read=/etc myscript.ts
  • Более полная стандартная библиотека. По сравнению с чем-то вроде Python, стандартная библиотека Node / Javascript разочаровывает. Deno пытается исправить это, упаковывая большинство рудиментарных и фундаментальных функций под капотом, так что внешние пакеты требуются только для сложных, неуниверсальных функций. Легкодоступные инструменты включают инструменты для управления цветом текста в интерфейсе командной строки, парсеры для структур данных, таких как CSV, создание UUID, WebSockets и т. Д.
  • Готовый к работе машинный код. Вы снова сказали «Ура!»? Посмотрим правде в глаза - любой, кто написал по крайней мере 1000 строк кода Node.js, хотел бы и имел бы проблемы с rin int из-за отсутствия строковой типизации и других льгот, предоставляемых Typescript. Итак, хорошая новость заключается в том, что Deno внутренне обрабатывает транспиляцию вашего TS-кода в JS без каких-либо внешних инструментов.

Означает ли это, что пора отказаться от Node и использовать Deno?

Нет. По крайней мере, пока. Для начала, Deno в лучшем случае все еще находится в зачаточном состоянии - сам по себе Deno 1.0, по общему признанию, не полностью стабилен. В настоящее время Node находится в версии 13.x и LTS версии 12.x, поэтому сравнение его стабильности с Deno даже не вопрос. Итак, пока мы можем придерживаться Node для кода производственного уровня, а пока мы могли бы продолжать играть с Deno и, возможно, попробовать использовать его в некоторых из наших личных домашних проектов, чтобы, когда все будет готово и будет готово к использованию производства, нам не нужно тратить время на его изучение.

Заинтересованы в том, чтобы поговорить со мной один на один по поводу этой истории или Angular, Typescript и Javascript в целом? Зайдите в Нанять автора и давайте подключаться!