Доступна платформа Deno 2.0, развиваемая автором Node.js
Опубликован выпуск платформы Deno 2.0, предназначенной для обособленного выполнения серверных приложений на языках JavaScript и TypeScript с использованием движка V8, применяемого в браузерах на основе Chromium. Проект Deno развивает Райан Даль (Ryan Dahl), создатель Node.js, с целью предоставления более защищённого окружения и устранения концептуальных ошибок, допущенных в архитектуре Node.js. Для повышения безопасности обвязка вокруг движка V8 написана на языке Rust, а для обработки запросов в неблокирующем режиме применяется платформа Tokio. Код проекта распространяется под лицензией MIT. Сборки подготовлены для Linux, Windows и macOS.
При подготовке новой ветки основное внимание было уделено совместимости со старой инфраструктурой JavaScript и расширению спекта поддерживаемых JavaScript-проектов без ущерба обеспечению безопасности. Среди изменений:
- Реализована обратная совместимость с Node.js и npm, позволяющая запускать немодифицированные приложения, созданные для Node.js. Поддержка Node.js также даёт возможность постепенно переводить существующие проекты с Node.js на использование Deno или подключать к Deno-проектам зависимости из NPM через указание спецификатора «npm:» при импорте пакетов в deno.json.
- Добавлена встроенная поддержка файла package.json и каталога с модулями node_modules, применяемых в Node.js.
- Обеспечена поддержка приватных NPM-репозиториев, определённых через файлы ».npmrc».
- Добавлена поддержка популярных JavaScript-фреймворков, таких как Next.js, Astro, Remix, Angular, SvelteKit и QwikCity.
- Добавлена поддержка рабочих пространств npm (workspace) и моно-репозиториев (monorepo) с раздельной обработкой зависимостей.
- Добавлены новые команды управления пакетами: «deno install» для установки зависимостей, «deno add» для добавления пакетов в package.json или deno.json, «deno remove» для удаления пакетов. Отмечается, что «deno install» работает примерно на 15 быстрее npm при отсутствия пакетов в кэше и на 90% быстрее при наличии пакета в кэше (поддерживается как node_modules, так и собственный глобальный кэш).
Стабилизирована стандартная библиотека.
- Обеспечен длительный цикл поддержки (LTS).
- Представлен JSR — репозиторий с JavaScript- и TypeScript-библиотеками, которые можно использовать в различными JavaScript Runtime.
- В команде «deno fmt» появилась возможность форматирования контента в форматах HTML, CSS и YAML.
- В команду «deno lint» добавлена поддержка специфичных для Node.js правил и исправлений.
- В команде «deno test» реализована возможность запуска тестов, созданных с использованием node: test.
- В команде «deno task» реализована поддержка запуска скриптов через package.json.
- В команде «deno compile» появилась возможность заверения кода цифровой подписью.
В команде «deno serve» реализовано распараллеливания операций HTTP-серверов с задействованием нескольких ядер CPU.
- В команде «deno coverage» появилась поддержка сохранения отчётов в формате HTML.
Проведена оптимизация производительности.
Основные особенности Deno:
Ориентация на безопасность в конфигурации по умолчанию. Обращения к файлам, сетевые возможности и доступ к переменным окружения по умолчанию блокированы и требуют явного включения. Приложения по умолчанию запускаются в изолированных sandbox-окружениях и не могут получить доступ к системным возможностям без предоставления явных полномочий;
Встроенная поддержка языка TypeScript помимо JavaScript. Для проверки типов и генерации JavaScript задействован штатный компилятор TypeScript, что приводит к проседанию производительности по сравнению с разбором JavaScript в V8;
Runtime поставляется в форме одного самодостаточного исполняемого файла («deno»). Для запуска приложений при помощи Deno достаточно загрузить для своей платформы один исполняемый файл, размером около 40 МБ, не имеющий внешних зависимостей и не требующий какой-то особой установки в систему. При этом deno не является монолитным приложением, а представляет собой коллекцию crate-пакетов на Rust (deno_core, rusty_v8), которые могут использоваться по отдельности;
При запуске программы, а также для загрузки модулей можно использовать адресацию через URL. Например, для запуска программы welcome.js можно использовать команду «deno https://deno.land/std/examples/welcome.js». Код с внешних ресурсов загружается и кэшируется на локальной системе, но никогда автоматически не обновляется (для обновления требуется явно запустить приложение с флагом »--reload»);
Эффективная обработка в приложениях сетевых запросов по HTTP, платформа рассчитана на создание высокопроизводительных сетевых приложений;
Возможность создания универсальных web-приложений, которые могут выполниться как в Deno, так и в обычном web-браузере;
Наличие стандартного набора модулей, использование которых не требует привязки к внешним зависимостям. Модули из стандартной коллекции прошли дополнительный аудит и проверку на совместимость;
Кроме runtime платформа Deno также выполняет роль пакетного менеджера и позволяет внутри кода обращаться к модулям по URL. Например, для загрузки модуля можно указать в коде «import * as log from «https://deno.land/std/log/mod.ts». Файлы, загруженные с внешних серверов по URL, кэшируются. Привязка к версиям модулей определяются через указания номеров версий внутри URL, например, «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
Ориентация на использование Web-стандартов, поддержка Promise, fetch и ECMAScript-модулей.
Совместимость с пакетами, размещёнными в репозитории NPM и созданными для платформы Node.js.
В состав интегрирована система инспектирования зависимостей (команда «deno info») и утилита для форматирования кода (deno fmt);
Все скрипты приложения могут быть объединены в один JavaScript-файл.
Источник: http://www.opennet.ru/opennews/art.shtml? num=62024
© OpenNet