Никто не знает, что нас ждет в будущем, но Deno выглядит многообещающе.

Что вообще такое Дено?

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

Он работает аналогично Node.js, но когда Node был выпущен в 2009 году, он был создан с учетом текущей версии JavaScript. JavaScript сильно изменился по сравнению с итерацией 2009 года, и с JavaScript, который мы знаем сегодня, есть гораздо больше удобств.

Deno стремится решить многие проблемы, которые есть в Node: безопасность, модульная система (эта гигантская node_modules папка) и наличие API, совместимых с браузером.

Давайте рассмотрим некоторые из его интересных функций!

Машинопись

В Deno есть встроенное расширение JavaScript TypeScript. Для тех, кто не знаком с TypeScript, ознакомьтесь с документацией здесь. Но возможность использовать модули компилятора, статической проверки и TypeScript в наших проектах - огромный плюс!

Децентрализованное управление пакетами

Как и сейчас, с npm, это централизованный репозиторий, что означает, что вы общаетесь с сервером, чтобы получить модули Node. С Deno гигантский список файлов в этой node_modules папке и package.json для управления зависимостями остались в прошлом! пакеты теперь импортируются из URL:

import clc from 'https://deno.land/x/color/index.ts'

Как только мы импортируем наши модули из Интернета и запускаем нашу программу, они кэшируются на жесткий диск после загрузки.

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

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

Мы запускаем наш код в нашей консоли, выполнив deno run example2.ts:

Мы получили PermissionDenied ошибку. Это мера безопасности, введенная Deno. Чтобы устранить эту ошибку, нам нужно запустить ее снова с флагом--allow-write, дав разрешение на запись нового файла. Хотя поначалу это может показаться утомительным и требует времени, чтобы привыкнуть, это хорошая мера безопасности, позволяющая предотвратить повреждение вашего устройства поврежденными файлами.

Модули ES

Вернемся к тому, как Deno обрабатывает модули. Допустим, мы хотим использовать классный сторонний модуль, который изменит цвет текста нашей консоли. Больше не нужно запускать npm install, просто import { example } from 'https://deno.land/x/path-of-module-here.ts' запустите свой код, Deno творит чудеса, и все, модуль реализован!

Ожидание верхнего уровня

Поскольку Deno работает на двигателе V8, у нас есть доступ к await верхнего уровня. Обычно мы используем await в асинхронной функции:

async function foo() {
 const bar = await Promise.resolve(console.log('Success!'))
}

Но с await верхнего уровня мы можем использовать await в глобальной области:

import { readJson } from 'https://deno.land/std/fs/mod.ts';

const foo = await readJson('./foo.json');

Дополнительную информацию о await верхнего уровня см. В документации здесь.

Тестирование

Deno также поставляется со своим собственным встроенным средством запуска тестов, которое можно использовать для тестирования кода JavaScript или TypeScript. Чтобы настроить тест, вы используете синтаксис Deno.test:

//example_test.ts
Deno.test("test example", () => {
  const x = 5 + 5;
  if (x !== 10) {
    throw Error("x should be equal to 10");
  }
});

Здесь мы создаем тест, в котором, если x равно любому другому значению, кроме 10, выдается ошибка, в которой указывается, что x должно быть равно 10. Чтобы запустить этот тест, мы вводим deno test example_test.ts в консоль.

Стандартная библиотека

Помимо сторонних модулей, у Deno есть несколько отличных стандартных библиотечных модулей. Вы можете ознакомиться с ними здесь.

Давайте воспользуемся одним из них сейчас, чтобы запустить сервер! Итак, в нашем списке стандартных библиотек мы хотим подключиться к библиотеке HTTP (deno.land /std /http) и импортировать URL-адрес сервера.

Мы назначаем нашему серверу порт 9000, console.log, чтобы подтвердить, что наш сервер работает, затем используем синтаксис for await, чтобы получить объект запроса и добавить ответ. Давайте запустим наш файл в терминале (не забудьте добавить разрешение) и посмотрим, что у нас получится.

Deno выглядит потрясающе, стоит ли мне вообще учиться работать с Node?

Совершенно верно! Следует отметить, что Node.js в ближайшее время никуда не денется. Node имеет стабильную, хорошо отлаженную экосистему, которая будет использоваться в миллионах проектов.

Deno - очень мощный инструмент, но он пока находится только в версии 1.0. Я уверен, что есть еще много нюансов и особенностей, над которыми нужно работать. Определенно, в ближайшие годы Deno может стать следующим большим достижением в JavaScript.

Если у вас есть свободное время, я определенно рекомендую поиграть с Deno и узнать, как он работает. Если это действительно произойдет, вы станете одним из первых пользователей и будете иметь преимущество перед всеми остальными!