Bol verzia Deno 1.28, platformy pre izolované spúšťanie aplikácií v jazykoch JavaScript a TypeScript, ktorá môže byť použitá na vytváranie serverových handlerov. Platformu vyvíja Ryan Dahl, tvorca Node.js. Tak ako v Node.js, aj v Deno sa používa JavaScriptový engine V8, ktorý sa využíva aj v prehliadačoch založených na Chromium. Deno však nie je odnožou Node.js, ale predstavuje úplne nový projekt vytvorený od základov. Kód projektu je šírený pod licenciou MIT. Sústavy sú pripravené pre Linux, Windows a macOS.
Projekt Deno bol vytvorený s cieľom poskytnúť používateľom bezpečnejšie prostredie a odstrániť konceptuálne chyby, ktoré sa vyskytli v architektúre Node.js. Na zlepšenie bezpečnosti je obal okolo engine V8 napísaný v jazyku Rust, ktorý umožňuje vyhnúť sa mnohým zraniteľnostiam vznikajúcim z nízkoúrovňovej manipulácie s pamäťou. Na spracovanie požiadaviek v neblokujúcom režime sa používa platforma Tokio, tiež napísaná v jazyku Rust. Tokio umožňuje vytvárať vysoko výkonné aplikácie na báze udalostnej architektúry (Event-driven), podporujúce viacvláknovosť a spracovanie sieťových požiadaviek v asynchrónnom režime.
Kľúčovou zmenou v novej verzii je stabilizácia kompatibility s balíčkami umiestnenými v repozitári NPM, čo umožňuje používať v Deno viac ako 1,3 milióna modulov vytvorených pre platformu Node.js. Napríklad, v aplikáciách na báze Deno je teraz možné používať také moduly na organizáciu trvalého prístupu k dátam, ako sú Prisma, Mongoose a MySQL, ako aj frameworky na zabezpečenie fungovania front-endov, ako sú React a Vue. Niektoré moduly NPM zatiaľ zostávajú nekompatibilné s Deno, napríklad kvôli viazanostiam na špecifické pre Node.js prvky prostredia, ako je súbor package.json. Taktiež zatiaľ nie je možné použiť príkaz „deno compile“ s modulmi NPM. V budúcich vydaniach sa plánuje odstrániť podobné nekompatibility a obmedzenia.
Podpora predtým používaného modelu v Deno, ktorý je založený na systéme modulov ECMAScript a Web API, zostala na rovnakej úrovni a pre import modulov NPM sa používa obvyklé schéma načítania na základe URL. Na prístup k modulom NPM je k dispozícii špeciálny URL prefix „npm:“, ktorý sa môže používať analogicky s bežnými modulmi Deno. Napríklad, pre import NPM modulu môžete uviesť ‘import { chalk } from „npm:chalk@5“;’, a pre spustenie NPM skriptu z príkazového riadku — „deno run —allow-env —allow-read npm:create-vite-extra“.
Používanie NPM balíkov v Deno je omnoho jednoduchšie než v Node.js, pretože nie je potrebné vopred inštalovať moduly (moduly sa inštalujú pri prvom spustení aplikácie), nie je použitý súbor package.json a predvolene sa nepoužíva adresár node_modules (moduly sú cachované v spoločnom adresári, ale existuje možnosť návratu starého správania pomocou volieb „—node-modules-dir“).
V aplikáciách na báze NPM zostáva možnosť využitia mechanizmov obmedzovania prístupu, izolácie a aktivácie rozšírených bezpečnostných funkcií, ktoré poskytuje Deno. Aby sa zabránilo útokom prostredníctvom pochybného závislostí, Deno predvolene blokuje všetky pokusy o prístup k systému zo závislostí a vydáva varovanie o zistených problémoch. Napríklad, pri pokuse o modulu o prístup na zápis do /usr/bin/ sa zobrazí dopyt na potvrdenie tejto operácie: deno run npm:install-malware ⚠️ ┌ Deno požaduje prístup na zápis do /usr/bin/. ├ Požadované od `install-malware` ├ Spustite znova s —allow-write, aby ste obísli tento prompt. └ Povoliť? [y/n] (y = áno, povoliť; n = nie, zamietnuť) >
Medzi nezávislými vylepšeniami v novej verzii sa spomína aktualizácia motora V8 na vydanie 10.9, automatické zisťovanie súborov s uzamknutím, stabilizácia API Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() a Deno.uid(), pridanie nového nestabilného API Deno.Command() na spúšťanie príkazov (univerzálna náhrada Deno.spawn, Deno.spawnSync a Deno.spawnChild).
Hlavné funkcie Deno:
- Orientácia na bezpečnosť v predvolenej konfigurácii. Prístup k súborom, sieťovým funkciám a k premenným prostredia je predvolene zablokovaný a vyžaduje explicitné povolenie. Aplikácie sa predvolene spúšťajú v izolovaných sandboxových prostrediach a nemôžu získať prístup k systémovým funkciám bez poskytnutia explicitných oprávnení;
- Integrovaná podpora jazyka TypeScript okrem JavaScriptu. Na kontrolu typov a generáciu JavaScriptu je zapojený interný TypeScript kompilátor, čo vedie k poklesu výkonu v porovnaní s analýzou JavaScriptu vo V8;
- Runtime je dodávaný vo forme jedného samostatného spustiteľného súboru ("deno"). Na spustenie aplikácií pomocou Deno stačí stiahnuť pre svoju platformu jeden spustiteľný súbor s veľkosťou približne 30 MB, ktorý nemá vonkajšie závislosti a nevyžaduje nijakú špeciálnu inštaláciu v systéme. Pri tom deno nie je monolitná aplikácia, ale predstavuje kolekciu crate-balíkov v Rust-e (deno_core, rusty_v8), ktoré môžu byť používané samostatne;
- Pri spúšťaní programu, ako aj na sťahovanie modulov je možné použiť adresovanie cez URL. Napríklad pre spustenie programu welcome.js môžete použiť príkaz „deno https://deno.land/std/examples/welcome.js“. Kód z externých zdrojov sa sťahuje a uklada na lokálnom systéme, ale nikdy sa automaticky neaktualizuje (na aktualizáciu je potrebné explicitne spustiť aplikáciu s prepínačom „—reload“);
- Efektívne spracovanie sieťových požiadaviek cez HTTP, platforma je určená na vytváranie vysokovýkonných sieťových aplikácií;
- Možnosť vytvárania univerzálnych webových aplikácií, ktoré môžu fungovať ako v Deno, tak aj v bežnom webovom prehliadači;
- Prítomnosť štandardného súboru modulov, ktorých používanie si nevyžaduje závislosť od vonkajších zdrojov. Moduly zo štandardnej kolekcie prešli dodatočným auditom a kontrolou kompatibility;
- Okrem runtime platforma Deno tiež funguje ako správca balíkov a umožňuje v rámci kódu pristupovať k modulom cez URL. Napríklad, na načítanie modulu môžete v kóde uviesť: „import * as log from 'https://deno.land/std/log/mod.ts'. Súbory načítané z externých serverov cez URL sú cachované. Závislosť od verzií modulov sa určuje cez uvedenie čísiel verzií v URL, napríklad: 'https://unpkg.com/liltest@0.0.5/dist/liltest.js';
- Do systému je integrovaný systém inšpekcie závislostí (príkaz 'deno info') a nástroj na formátovanie kódu (deno fmt);
- Všetky skripty aplikácie môžu byť združené do jedného súboru JavaScript.
Zdroj: opennet.ru
