У JavaScript-платформе Deno забяспечана сумяшчальнасць з модулямі 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 ├ Requested by `install-malware` ├ Run again with -allow-write 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:

  • Арыентацыя на бяспеку ў канфігурацыі па змаўчанні. Звароты да файлаў, сеткавыя магчымасці і доступ да зменных асяроддзі па змаўчанні блакіраваны і патрабуюць відавочнага ўключэння. Прыкладанні па змаўчанні запускаюцца ў ізаляваных sandbox-акружэннях і не могуць атрымаць доступ да сістэмных магчымасцяў без прадастаўлення відавочных паўнамоцтваў;
  • Убудаваная падтрымка мовы 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, платформа разлічана на стварэнне высокапрадукцыйных сеткавых прыкладанняў;
  • Магчымасць стварэння ўніверсальных web-прыкладанняў, якія могуць выканацца як у Deno, так і ў звычайным web-браўзэры;
  • Наяўнасць стандартнага набору модуляў, выкарыстанне якіх не патрабуе прывязкі да вонкавых залежнасцяў. Модулі са стандартнай калекцыі прайшлі дадатковы аўдыт і праверку на сумяшчальнасць;
  • Акрамя 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 файл.

Крыніца: opennet.ru

Дадаць каментар