Versjonen av Deno 2.0 er utgitt, som er designet for isolert kjøring av serverapplikasjoner skrevet i JavaScript og TypeScript ved bruk av V8-motoren som brukes i Chromium-baserte nettlesere. Deno-prosjektet blir utviklet av Ryan Dahl, skaperen av Node.js, med mål om å tilby et sikrere miljø og rette opp konseptuelle feil gjort i Node.js-arkitekturen. For å øke sikkerheten er innpakningen rundt V8-motoren skrevet i Rust, og plattformen Tokio brukes for ikke-blokkerende forespørselshåndtering. Koden distribueres under MIT-lisensen. Byggene er forberedt for Linux, Windows og macOS.
Når den nye grenen ble forberedt, var hovedfokuset på kompatibilitet med den gamle JavaScript-infrastrukturen og utvidelse av støtten for JavaScript-prosjekter uten å gå på bekostning av sikkerheten. Blant endringene:
- Tilbakekompatibilitet med Node.js og npm er implementert, noe som gjør det mulig å kjøre uendret applikasjoner laget for Node.js. Støtten for Node.js gir også mulighet til gradvis å overføre eksisterende prosjekter fra Node.js til bruk av Deno, eller koble NPM-avhengigheter til Deno-prosjekter ved å spesifisere «npm:»-spesifikatoren ved import av pakker i deno.json.
- Innebygd støtte for package.json-filer og katalogen med node_modules-moduler som brukes i Node.js er lagt til.
- Støtte for private NPM-repositorier definert gjennom «.npmrc»-filer er sikret.
- Støtte for populære JavaScript-rammeverk som Next.js, Astro, Remix, Angular, SvelteKit og QwikCity er lagt til.
- Støtte for npm-arbeidsområder (workspace) og monorepositorier (monorepo) med separat behandling av avhengigheter er lagt til.
- Nye pakkeadministrasjonskommandoer er lagt til: «deno install» for å installere avhengigheter, «deno add» for å legge til pakker i package.json eller deno.json, «deno remove» for å fjerne pakker. Det påpekes at «deno install» er omtrent 15 ganger raskere enn npm når det ikke er pakker i cache, og 90 % raskere når pakken er i cache (både node_modules og egen global cache støttes).
- Standardbiblioteket er stabilisert.
- Langvarig støtte (LTS) er sikret.
- JSR er introdusert — et repository med JavaScript- og TypeScript-biblioteker som kan brukes i forskjellige JavaScript-runtime.
- I kommandolinjen «deno fmt» har det blitt mulig å formatere innhold i HTML-, CSS- og YAML-formater.
- Kommandoen «deno lint» har fått støtte for Node.js-spesifikke regler og rettinger.
- I kommandoen «deno test» er det nå mulig å kjøre tester laget med node:test.
- I kommandoen «deno task» er det lagt til støtte for å kjøre skript via package.json.
- I kommandoen «deno compile» er det nå mulig å signere koden med en digital signatur.
- I kommandoen «deno serve» er det implementert parallellisering av HTTP-serveroperasjoner ved å bruke flere CPU-kjerner.
- I kommandoen «deno coverage» er det lagt til støtte for lagring av rapporter i HTML-format.
- Ytelsesoptimalisering er gjennomført.

Hovedfunksjoner ved Deno:
- Sikkerhetsfokus i standardkonfigurasjonen. Filtilgang, nettverksmuligheter og tilgang til miljøvariabler er som standard blokkert og krever eksplisitt tillatelse. Applikasjoner kjøres som standard i isolerte sandkassemiljøer og kan ikke få tilgang til systemressurser uten å bli eksplisitt gitt tillatelser;
- Innebygd støtte for TypeScript i tillegg til JavaScript. Typekontroll og generering av JavaScript skjer ved hjelp av den innebygde TypeScript-kompilatoren, noe som fører til en nedgang i ytelse sammenlignet med JavaScript-parsing i V8;
- Kjøreprogrammet leveres som en enkel, selvstendig kjørbar fil («deno»). For å kjøre applikasjoner med Deno er det nok å laste ned én kjørbar fil for plattformen din, på cirka 40 MB, uten eksterne avhengigheter og uten behov for spesialinstallasjon i systemet. Deno er ikke et monolitisk program, men en samling crate-pakker på Rust (deno_core, rusty_v8) som kan brukes hver for seg.
- Når programmet kjøres, samt for å laste moduler, kan adressene brukes gjennom URL. For eksempel kan kommandoen «deno https://deno.land/std/examples/welcome.js» brukes for å kjøre programmet welcome.js. Kode fra eksterne ressurser lastes ned og lagres i det lokale systemet, men oppdateres aldri automatisk (for oppdateringer kreves det at applikasjonen kjøres eksplisitt med flagget «—reload»);
- Effektiv behandling av HTTP-nettverksforespørsel i applikasjoner, plattformen er designet for å lage høyytelses nettverksapplikasjoner;
- Mulighet til å lage universelle webapplikasjoner, som kan kjøres både i Deno og i vanlige nettlesere;
- Tilgjengeligheten av et standard sett med moduler som ikke krever binding til eksterne avhengigheter. Modulene i standardpakken har gjennomgått en ekstra revisjon og kompatibilitetstest;
- I tillegg til runtime-funksjonen tilbyr Deno-plattformen også en pakkehåndterer som gjør det mulig å referere til moduler ved URL i koden. For eksempel, for å laste ned en modul kan man angi i koden «import * as log from «https://deno.land/std/log/mod.ts». Filer som er lastet ned fra eksterne servere via URL, blir cachet. Bindingen til versjoner av moduler bestemmes gjennom angivelse av versjonsnumre i URL-en, for eksempel «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- Fokus på bruk av webstandarder, støtte for Promise, fetch og ECMAScript-moduler.
- Kompatibilitet med pakker som er plassert i NPM-repositoriet og laget for Node.js-plattformen.
- Det er integrert et system for inspeksjon av avhengigheter (kommandoen «deno info») og et verktøy for kodingformattering (deno fmt);
- Alle skriptene i applikasjonen kan slås sammen til én JavaScript-fil.
Kilde: opennet.ru

