Predstavljen je Deno 1.28, platforma za izolirano izvršavanje aplikacija na JavaScript-u i TypeScript-u, koja se može koristiti za izradu poslužiteljskih rukovalaca. Platformu razvija Ryan Dahl, kreator Node.js. Kao i u Node.js, u Deno-u se koristi JavaScript motor V8, koji se također primjenjuje u preglednicima temeljenim na Chromiumu. Međutim, Deno nije varijacija na Node.js, već predstavlja potpuno novi projekt izrađen od nule. Izvorni kod projekta je pod MIT licencom. Izrade su pripremljene za Linux, Windows i macOS.
Projekt Deno je stvoren kako bi korisnicima pružio sigurnije okruženje i ispravio konceptualne greške napravljene u arhitekturi Node.js. Za povećanje sigurnosti, omotač oko motora V8 je napisan na jeziku Rust, koji omogućuje izbjegavanje mnogih ranjivosti koje proizašle iz niskonivoa rada s memorijom. Platforma Tokio, također napisana na jeziku Rust, koristi se za obradu zahtjeva u neblokirajućem načinu. Tokio omogućuje kreiranje visokoučinkovitih aplikacija temeljnih na događajima koje podržavaju višedretvenost i obradu mrežnih zahtjeva u asinkronom režimu.
Ključna promjena u novom izdanju je stabilizacija kompatibilnosti s paketima objavljenim u NPM repozitoriju, što omogućuje korištenje više od 1.3 milijuna modula stvorenih za Node.js u Deno-u. Na primjer, u aplikacijama temeljenim na Deno-u sada se mogu koristiti moduli poput Prisme, Mongoose-a i MySQL-a za organizaciju stalnog pristupa podacima, kao i okviri za osiguranje rada frontendova poput React-a i Vue-a. Neki NPM moduli su još uvijek nespojivi s Deno-om, primjerice zbog veza s elementima okruženja specifičnim za Node.js, kao što je datoteka package.json. Također nije moguće koristiti naredbu „deno compile“ s NPM modulima. U budućim izdanjima planira se ukloniti takve nespojivosti i ograničenja.
Podrška za ranije korišteni model u Deno temeljen na ECMAScript sustavu modula i Web API-ju ostala je na istoj razini, a za uvoz NPM modula koristi se uobičajena shema učitavanja na temelju URL-a. Za pristup NPM modulima predviđen je poseban URL-prefiks „npm:”, koji se može koristiti kao i kod običnih Deno modula. Na primjer, za uvoz NPM modula može se navesti ‘import { chalk } from „npm:chalk@5”;’, a za pokretanje NPM skripte iz komandne linije — „deno run —allow-env —allow-read npm:create-vite-extra”.
Korištenje NPM paketa u Deno je znatno jednostavnije nego u Node.js, jer nije potrebna prethodna instalacija modula (moduli se instaliraju prilikom prvog pokretanja aplikacije), ne koristi se datoteka package.json, a također se po defaultu ne koristi katalog node_modules (moduli se keširaju u zajedničkom katalogu, ali postoji mogućnost vraćanja starog ponašanja pomoću opcije „—node-modules-dir”).
U aplikacijama temeljenim na NPM zadržava se mogućnost korištenja mehanizama razgraničenja pristupa, izolacije i aktiviranja naprednih funkcionalnosti koje utječu na sigurnost, koje Deno nudi. Kako bi se suprotstavio napadima putem sumnjivih ovisnosti, Deno po defaultu blokira sve pokušaje pristupa sustavu iz ovisnosti i ispisuje upozorenje o otkrivenim problemima. Na primjer, prilikom pokušaja modula da dobije pristup za pisanje u /usr/bin/ bit će prikazan zahtjev za potvrdu ove operacije: deno run npm:install-malware ⚠️ ┌ Deno traži pristup za pisanje u /usr/bin/. ├ Zahtijevano od `install-malware` ├ Ponovno pokrenite s —allow-write da biste zaobišli ovaj poziv. └ Dozvoliti? [y/n] (y = da, dozvoli; n = ne, odbij) >
Među nepovezanim poboljšanjima u NPM u novoj verziji spominje se ažuriranje V8 motora na izdanju 10.9, automatsko prepoznavanje datoteka s zaključavanjima, stabilizacija API-ja Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() i Deno.uid(), dodavanje novog nestabilnog API-ja Deno.Command() za pokretanje naredbi (univerzalna zamjena Deno.spawn, Deno.spawnSync i Deno.spawnChild).
Glavne značajke Deno:
- Usmjerenost na sigurnost u zadanoj konfiguraciji. Pristupi datotekama, mrežne mogućnosti i pristup varijablama okruženja po zadanom su blokirani i zahtijevaju izričito uključivanje. Aplikacije po zadanoj postavci pokreću se u izoliranim sandbox okruženjima i ne mogu pristupiti sistemskim mogućnostima bez odobrenja;
- Integrirana podrška za TypeScript uz JavaScript. Za provjeru tipova i generiranje JavaScripta koristi se ugrađeni TypeScript kompajler, što dovodi do smanjenja performansi u usporedbi s obradom JavaScripta u V8;
- Runtime dolazi u obliku jedne samostalne izvršne datoteke („deno“). Za pokretanje aplikacija pomoću Deno-a dovoljno je preuzeti jednu izvršnu datoteku za svoju platformu, veličine oko 30 MB, koja nema vanjskih zavisnosti i ne zahtijeva neku posebnu instalaciju u sustav. U tom smislu, deno nije monolitna aplikacija, već predstavlja kolekciju crate paketa na Rustu (deno_core, rusty_v8), koje se mogu koristiti zasebno;
- Prilikom pokretanja programa, kao i za učitavanje modula, mogu se koristiti adrese putem URL-a. Na primjer, za pokretanje programa welcome.js može se koristiti naredba 'deno https://deno.land/std/examples/welcome.js'. Kod s vanjskih resursa učitava se i kešira na lokalnom sustavu, ali se nikada automatski ne ažurira (za ažuriranje je potrebno izričito pokrenuti aplikaciju s zastavicom '--reload');
- Učinkovita obrada mrešnih zahtjeva putem HTTP-a, platforma je osmišljena za stvaranje visoko performantnih mrežnih aplikacija;
- Mogućnost izrade univerzalnih web aplikacija koje se mogu izvesti kako u Denu, tako i u običnom web pregledniku;
- Postojanje standardnog skupa modula, čija uporaba ne zahtijeva vezivanje uz vanjske ovisnosti. Moduli iz standardne kolekcije prošli su dodatnu reviziju i provjeru kompatibilnosti;
- Osim runtime-a, platforma Deno također djeluje kao upravitelj paketa i omogućuje da se unutar koda obraća modulima putem URL-a. Na primjer, za preuzimanje modula može se navesti u kodu „import * as log from "https://deno.land/std/log/mod.ts“. Datoteke preuzete s vanjskih poslužitelja URL-ova se кешираju. Veze s verzijama modula se određuju putem specifikacije numeričkih verzija unutar URL-a, na primjer, "https://unpkg.com/liltest@0.0.5/dist/liltest.js";
- U sustav je integriran alat za inspekciju ovisnosti (komanda „deno info”) i alat za formatiranje koda (deno fmt);
- Sve skripte aplikacije mogu se spojiti u jednu JavaScript datoteku.
Izvor: opennet.ru
