A fost lansată versiunea Deno 1.28, o platformă pentru executarea izolată a aplicațiilor scrise în JavaScript și TypeScript, care poate fi utilizată pentru a crea handleri care funcționează pe server. Platforma este dezvoltată de Ryan Dahl, creatorul Node.js. La fel ca în Node.js, Deno folosește motorul JavaScript V8, folosit și în browserele bazate pe Chromium. Totuși, Deno nu este o ramificare a Node.js, ci un proiect nou, creat de la zero. Codul proiectului este distribuit sub licența MIT. Versiunile sunt disponibile pentru Linux, Windows și macOS.
Proiectul Deno a fost creat pentru a oferi utilizatorilor un mediu mai sigurat și pentru a corecta erorile conceptuale din arhitectura Node.js. Pentru a îmbunătăți securitatea, învăluirea din jurul motorului V8 este scrisă în Rust, un limbaj care permite evitarea multor vulnerabilități apărute din cauza lucrului la nivel de bază cu memoria. Pentru a gestiona solicitările în mod neblocat, se folosește platforma Tokio, de asemenea scrisă în Rust. Tokio permite crearea de aplicații de înaltă performanță bazate pe arhitectura orientată pe evenimente, care suportă multithreading și procesarea asynchronică a solicitărilor de rețea.
Principala schimbare din noua versiune este stabilizarea compatibilității cu pachetele găzduite în repository-ul NPM, ceea ce permite utilizarea a peste 1.3 milioane de module în Deno, create pentru platforma Node.js. De exemplu, în aplicațiile bazate pe Deno pot fi folosite acum module precum Prisma, Mongoose și MySQL pentru a organiza accesul persistent la date, precum și framework-uri pentru susținerea frontend-urilor, cum ar fi React și Vue. Unele module NPM rămân deocamdată incompatibile cu Deno, de exemplu din cauza legăturilor cu elemente de mediu specifice Node.js, cum ar fi fișierul package.json. De asemenea, nu este posibil să folosiți comanda „deno compile” cu module NPM. Se preconizează că astfel de incompatibilități și restricții vor fi eliminate în versiunile viitoare.
Suportul pentru modelul utilizat anterior în Deno, bazat pe sistemul de module ECMAScript și API-urile Web, este păstrat la același nivel, iar pentru importul modulelor NPM se folosește schema familiară de încărcare Deno bazată pe URL. Accesul la modulele NPM este prevăzut printr-un prefix URL special „npm:”, care poate fi utilizat analogic cu modulele obișnuite Deno. De exemplu, pentru a importa un modul NPM, se poate specifica ‘import { chalk } from „npm:chalk@5”;’, iar pentru a rula un script NPM din linia de comandă — „deno run —allow-env —allow-read npm:create-vite-extra”.
Utilizarea pachetelor NPM în Deno este semnificativ mai simplă decât în Node.js, deoarece nu mai este nevoie de instalarea anticipată a modulelor (modulele sunt instalate la prima execuție a aplicației), nu se folosește fișierul package.json, și, în mod implicit, nu se utilizează directorul node_modules (modulele sunt stocate într-un director comun, dar este posibil să se revină la comportamentul anterior prin opțiunea „—node-modules-dir”).
În aplicațiile bazate pe NPM, rămâne disponibilă utilizarea mecanismelor de restricționare a accesului, izolare și activare a capabilităților extinse care influențează securitatea, oferite de Deno. Pentru a contracara atacurile prin dependențe suspecte, Deno blochează, în mod implicit, toate încercările de acces la sistem din dependențe și afișează un aviz privind problemele identificate. De exemplu, când un modul încearcă să obțină acces de scriere în /usr/bin/, va apărea o solicitare de confirmare a acestei operațiuni: deno run npm:install-malware ⚠️ ┌ Deno cere acces de scriere în /usr/bin/. ├ Cerut de `install-malware` ├ Rulați din nou cu —allow-write pentru a evita această solicitare. └ Permite? [y/n] (y = da, permite; n = nu, refuză) >
Printre îmbunătățirile nesusținute în NPM menționate în noua versiune se numără actualizarea motorului V8 la versiunea 10.9, determinarea automată a fișierelor de blocare, stabilizarea API-urilor Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() și Deno.uid(), adăugarea unui nou API instabil Deno.Command() pentru executarea comenzilor (înlocuirea universală a Deno.spawn, Deno.spawnSync și Deno.spawnChild).
Caracteristicile principale ale Deno:
- Orientare asupra securității în configurația implicită. Accesările la fișiere, capacitățile de rețea și accesul la variabilele de mediu sunt blocate în mod implicit și necesită activare explicită. Aplicațiile sunt lansate în mod implicit în medii de izolare (sandbox) și nu pot accesa capacitățile sistemului fără a se oferi permisiuni explicite;
- Suport încorporat pentru limbajul TypeScript pe lângă JavaScript. Verificarea tipurilor și generarea JavaScript se face cu ajutorul compilatorului TypeScript nativ, ceea ce duce la o scădere a performanței în comparație cu analiza JavaScript în V8;
- Runtime-ul este disponibil sub forma unui fișier executabil autonom („deno”). Pentru a rula aplicații folosind Deno, este suficient să descărcați un singur fișier executabil pentru platforma dvs., având aproximativ 30 MB, fără dependențe externe și fără a necesita o instalare specială în sistem. În plus, deno nu este o aplicație monolitică, ci reprezintă o colecție de pachete crate în Rust (deno_core, rusty_v8), care pot fi utilizate individual;
- Pentru a lansa programe, precum și pentru a încărca module, se poate utiliza adresarea prin URL. De exemplu, pentru a lansa programul welcome.js, se poate folosi comanda „deno https://deno.land/std/examples/welcome.js”. Codul de pe resurse externe este descărcat și stocat în sistemul local, dar nu este niciodată actualizat automat (pentru actualizare este necesară rularea explicită a aplicației cu flagul „—reload”);
- Procesarea eficientă a cererilor de rețea HTTP, platforma fiind concepută pentru construirea de aplicații de rețea de înaltă performanță;
- Posibilitatea de a crea aplicații web universale care pot rula atât în Deno, cât și în browsere web obișnuite;
- Există un set standard de module, a căror utilizare nu necesită legătura cu dependențe externe. Modulele din colecția standard au fost supuse unui audit suplimentar și verificării compatibilității;
- Pe lângă runtime, platforma Deno joacă și rolul de manager de pachete și permite accesarea modulelor prin URL în interiorul codului. De exemplu, pentru a încărca un modul, se poate specifica în cod „import * as log from "https://deno.land/std/log/mod.ts". Fișierele descărcate de la URL-uri externe servere sunt stocate în cache. Legătura cu versiunile modulelor este stabilită prin specificarea numerelor de versiune în URL, de exemplu, „https://unpkg.com/liltest@0.0.5/dist/liltest.js”;
- În compunere este integrat un sistem de inspectare a dependențelor (comanda „deno info”) și o unealtă pentru formatat cod (deno fmt);
- Toate scripturile aplicației pot fi combinate într-un singur fișier JavaScript.
Sursa: opennet.ro
