Никто не знает, что нас ждет в будущем, но 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 и узнать, как он работает. Если это действительно произойдет, вы станете одним из первых пользователей и будете иметь преимущество перед всеми остальными!