Главная задача Deno – исправить недостатки Node.js. И, похоже, что новый проект уверенными шагами идёт к тому, чтобы сменить своего предшественника. Давайте узнаем о нем детальнее.
Когда создатель Node.js Райан Дал выступал на конференции, рассказывая о своих 10-ти сожалениях, связанных с Node.js, первую половину доклада он посвятил неудачным решениям, а вторую – одной только экспериментальной модели Deno. Среде не зря пророчат большое будущее: она уже доросла до версии v0.3.8 и не планирует сдавать темпы развития.
Чем плоха Node.js?
1- Все программы имеют доступ к записи данных в файловую систему
Это значит, что есть большой риск возникновения угрозы безопасности, тем более, когда устанавливаются непроверенные npm-пакеты. Яркий пример – случай с cross-env. Не имей он разрешения на осуществление записей, подобное точно не произошло бы.
2 - Асинхронные API, которые быстро устаревают
Promises возникли в 2009-ом, и исчезли уже в следующем году. Тем не менее, большая часть библиотек, предназначенных для написания асинхронного кода, все еще использует эту устаревшую технологию.
3 - GYP – система автоматизации сборки
Сделать модуль, подключающий C-библиотеки через GYP – одно мучение. Для получения соответствующего developer experience нужно добавлять слой node-gyp и, вероятно, еще несколько других слоев. Даже работая с небольшим проектом, вам придется хорошо попотеть, чтобы разобраться в вышеописанном.
4 - Система модулей
Основная проблема заключается в несовместимости системы модулей с браузерами, т.е. код не целиком изоморфен. Это происходит по двум причинам: наличие стандартного менеджера пакетов package.json и использование node_modules для хранения зависимостей.
Deno – что это?
Deno – новый проект от создателя Node.js Райана Дала. Он представляет собой защищенную среду выполнения для TypeScript, основанную на движке V8.
Так как Typescript является расширенной вариацией Javascript, Deno прекрасно подходит и для этого языка программирования.
Ключевые особенности Deno
1 - Безопасность
Стандартными настройками Deno запрещена столь деликатная деятельность, как запись в сеть или файловую систему, а также чтение переменных окружения. Для того чтобы получить доступ к таким операциям, нужно передать особые флаги.
По умолчанию разрешение записи данных в файловую систему и сеть отключено. Включить его можно только с помощью аргументов --allow-write, --allow-net.
Взаимосвязь между привилегированным процессом среды и движком v8 ограничена обменом сообщений (раньше был на Go, а теперь перенесен на Rust). Таким образом, для проверки всего объема сообщений создается единая точка.
2 - Система модулей
Можно забыть о package.json вместе с «node_modules». Импортируя исходные файлы, вы сами выбираете, что указывать: относительный/абсолютный путь или даже URL-адрес. Исходные файлы по умолчанию кэшируются.
import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts"
import { log } from "./util.ts"
Чтобы обновить зависимости, нужно применить аргумент --reload (это как нажать F5 в любом браузере).
3 - Поддержка TS прямо из коробки
Deno поддерживает TypeScript по умолчанию, безо всяких нюансов и дополнительных конфигураций.
В заключение
Среде Deno предстоит пройти длинный путь, прежде чем она станет полноценным востребованным инструментом. Но многие разработчики уверены, что этот проект развивается в правильном направлении и имеет все шансы вытеснить Node.js, став более совершенной средой выполнения для Javascript.