Deno JavaScript платформасы NPM модулдары менен шайкеш келет

Представлен выпуск Deno 1.28, платформы для обособленного выполнения приложений на языках JavaScript и TypeScript, которая может быть использована для создания обработчиков, работающих на сервере. Платформу развивает Райан Даль (Ryan Dahl), создатель Node.js. Как и в Node.js в Deno используется JavaScript-движок V8, который также применяется в браузерах на основе Chromium. При этом Deno не является ответвлением от Node.js, а представляет собой созданный с нуля новый проект. Код проекта распространяется под лицензией MIT. Сборки подготовлены для Linux, Windows и macOS.

Проект Deno был создан для предоставления пользователям более защищённое окружение и устранения концептуальных ошибок, допущенных в архитектуре Node.js. Для повышения безопасности обвязка вокруг движка V8 написана на языке Rust, позволяющем избежать многих уязвимостей, возникающих из-за низкоуровневой работы с памятью. Для обработки запросов в неблокирующем режиме применяется платформа Tokio, также написанная на языке Rust. Tokio позволяет создавать высокопроизводительные приложения на основе событийно-ориентированной архитектуры (Event-driven), поддерживающие многопоточность и обработку сетевых запросов в асинхронном режиме.

Ключевым изменением в новом выпуске является стабилизация совместимости с пакетами, размещёнными в репозитории NPM, что позволяет использовать в Deno более 1.3 млн модулей, созданных для платформы Node.js. Например, в приложениях на базе Deno теперь можно использовать такие модули для организации постоянного доступа к данным, как Prisma, Mongoose и MySQL, а также фреймворки для обеспечения работы фронтэндов, такие как React и Vue. Некоторые NPM-модули пока остаются несовместимыми с Deno, например, из-за привязок к специфичным для Node.js элементам окружения, таким как файл package.json. Также пока невозможно использовать команду «deno compile» с модулями NPM. В будущих выпусках планируется устранить подобные несовместимости и ограничения.

Поддержка ранее применяемой в Deno модели на основе системы модулей ECMAScript и Web API сохранена на том же уровне и для импорта модулей NPM используется привычная для Deno схема загрузки на основе URL. Для обращения к модулям NPM предусмотрен специальный URL-префикс «npm:», который может использоваться по аналогии с обычными модулями Deno. Например, для импорта NPM-модуля можно указать ‘import { chalk } from «npm:chalk@5»;’, а для запуска NPM-скрипта из командной строки — «deno run —allow-env —allow-read npm:create-vite-extra».

Использование NPM-пакетов в Deno значительно проще, чем в Node.js, так как нет необходимости предварительной установки модулей (модули устанавливаются при первом запуске приложения), не используется файл package.json, а также не используется по умолчанию каталог node_modules (модули кэшируются в общем каталоге, но есть возможность возвращения старого поведения при помощи опции «—node-modules-dir»).

В приложениях на базе NPM сохраняется возможность использования предоставляемых в Deno механизмов разграничения доступа, изоляции и активации влияющих на безопасность расширенных возможностей. Для противодействия проведению атак через сомнительные зависимости Deno блокирует по умолчанию все попытки получения доступа к системе из зависимостей и выводит предупреждение о выявленных проблемах. Например, при попытке модуля получения доступа на запись в /usr/bin/ будет выведен запрос подтверждения данной операции: deno run npm:install-malware ⚠️ ┌ Deno requests write access to /usr/bin/. ├ Requested by `install-malware` ├ Run again with —allow-write to bypass this prompt. └ Allow? [y/n] (y = yes, allow; n = no, deny) >

Из не связанных в NPM улучшений в новой версии упоминается обновление движка V8 до выпуска 10.9, автоматическое определение файлов с блокировками, стабилизация API Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() и Deno.uid(), добавление нового нестабильного API Deno.Command() для запуска команд (универсальная замена Deno.spawn, Deno.spawnSync и Deno.spawnChild).

Основные особенности Deno:

  • Коопсуздукка багытталган демейки конфигурация. Файлга кирүү, тармактык жана чөйрө өзгөрмөлөрүнүн мүмкүнчүлүгү демейки боюнча өчүрүлгөн жана ачык түрдө иштетилиши керек. Тиркемелер демейки боюнча обочолонгон кумдук чөйрөлөрдө иштейт жана ачык уруксаттарсыз системанын мүмкүнчүлүктөрүнө кире албайт;
  • Встроенная поддержка языка TypeScript помимо JavaScript. Для проверки типов и генерации JavaScript задействован штатный компилятор TypeScript, что приводит к проседанию производительности по сравнению с разбором JavaScript в V8;
  • Runtime поставляется в форме одного самодостаточного исполняемого файла («deno»). Для запуска приложений при помощи Deno достаточно загрузить для своей платформы один исполняемый файл, размером около 30 МБ, не имеющий внешних зависимостей и не требующий какой-то особой установки в систему. При этом deno не является монолитным приложением, а представляет собой коллекцию crate-пакетов на Rust (deno_core, rusty_v8), которые могут использоваться по отдельности;
  • Программаны баштаганда, ошондой эле модулдарды жүктөө үчүн сиз URL дарегин колдоно аласыз. Мисалы, Welcome.js программасын иштетүү үчүн “deno https://deno.land/std/examples/welcome.js” буйругун колдонсоңуз болот. Тышкы ресурстардан алынган код локалдык системада жүктөлүп алынат жана кэштелет, бирок эч качан автоматтык түрдө жаңыланбайт (жаңыртуу үчүн тиркемени “--reload” желекчеси менен ачык иштетүү талап кылынат);
  • Тиркемелерде HTTP аркылуу тармактык суроо-талаптарды эффективдүү иштетүү; платформа жогорку натыйжалуу тармактык тиркемелерди түзүү үчүн иштелип чыккан;
  • Денодо да, кадимки веб-браузерде да аткарыла турган универсалдуу веб-тиркемелерди түзүү мүмкүнчүлүгү;
  • Наличие стандартного набора модулей, использование которых не требует привязки к внешним зависимостям. Модули из стандартной коллекции прошли дополнительный аудит и проверку на совместимость;
  • Кроме runtime платформа Deno также выполняет роль пакетного менеджера и позволяет внутри кода обращаться к модулям по URL. Например, для загрузки модуля можно указать в коде «import * as log from «https://deno.land/std/log/mod.ts». Файлы, загруженные с внешних серверов по URL, кэшируются. Привязка к версиям модулей определяются через указания номеров версий внутри URL, например, «https://unpkg.com/[электрондук почта корголгон]/dist/liltest.js";
  • Түзүм көз карандылыкты текшерүүнүн интеграцияланган тутумун («deno info» буйругу) жана кодду форматтоо үчүн утилитаны (deno fmt) камтыйт;
  • Бардык колдонмо скрипттерин бир JavaScript файлына бириктирсе болот.

Source: opennet.ru

Комментарий кошуу