د 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" کمانډ وکاروئ. د بهرنیو سرچینو څخه کوډ په محلي سیسټم کې ډاونلوډ او زیرمه شوی، مګر هیڅکله په اوتومات ډول نه تازه کیږي (تازه کول په ښکاره ډول د "--ریلوډ" بیرغ سره غوښتنلیک چلولو ته اړتیا لري)؛
  • په غوښتنلیکونو کې د 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) لپاره اسانتیا شامله ده؛
  • ټول غوښتنلیک سکریپټونه په یو جاوا سکریپټ فایل کې یوځای کیدی شي.

سرچینه: opennet.ru

Add a comment