Den nya versionen av plattformen Deno 2.0 har publicerats, avsedd för isolerad körning av serverapplikationer skrivna i JavaScript och TypeScript, med hjälp av V8-motorn som används i Chromium-baserade webbläsare. Projektet Deno utvecklas av Ryan Dahl, skaparen av Node.js, för att erbjuda en säkrare miljö och rätta till konceptuella fel i Node.js-arkitekturen. För att öka säkerheten är omslaget runt V8-motorn skrivet i Rust, och för att hantera förfrågningar i icke-blockerande läge används plattformen Tokio. Projektets kod distribueras under MIT-licensen. Byggnader är förberedda för Linux, Windows och macOS.
I förberedelserna av den nya grenen har fokus lagts på att säkerställa kompatibilitet med den gamla JavaScript-infrastrukturen och att bredda spektrumet av stöd för JavaScript-projekt utan att kompromissa med säkerheten. Bland ändringarna finns:
- Bakåtkompatibilitet med Node.js och npm har implementerats, vilket gör att oförändrade applikationer skapade för Node.js kan köras. Stödet för Node.js gör det också möjligt att gradvis migrera befintliga projekt från Node.js till Deno eller att koppla NPM-beroenden till Deno-projekt genom att ange specificeraren "npm:" vid paketimport i deno.json.
- Inbyggt stöd för filen package.json och katalogen med node_modules-moduler som används i Node.js har lagts till.
- Stöd för privata NPM-förråd definierade genom filer med namnet " .npmrc" har säkerställts.
- Stöd för populära JavaScript-ramverk har lagts till, såsom Next.js, Astro, Remix, Angular, SvelteKit och QwikCity.
- Stöd för npm-arbetsytor (workspace) och monorepo har lagts till med separat hantering av beroenden.
- Nya kommandon för paketförvaltning har lagts till: "deno install" för att installera beroenden, "deno add" för att lägga till paket i package.json eller deno.json, "deno remove" för att ta bort paket. Det noteras att "deno install" fungerar ungefär 15 gånger snabbare än npm när det inte finns några paket i cache och 90 % snabbare när paketet finns i cache (både node_modules och den egna globala cachen stöds).
- Standardbiblioteket har stabiliserats.
- Långtidsstöd (LTS) har säkerställts.
- JSR har introducerats – ett förråd med JavaScript- och TypeScript-bibliotek som kan användas i olika JavaScript-runtime.
- I kommandot "deno fmt" har möjligheten att formatera innehåll i HTML, CSS och YAML lagts till.
- Kommandot "deno lint" har fått stöd för Node.js-specifika regler och korrigeringar.
- I kommandot "deno test" har funktionalitet lagts till för att köra tester skapade med node:test.
- I kommandot "deno task" har stöd för att köra skript via package.json lagts till.
- I kommandot "deno compile" har möjligheten att signera koden med en digital signatur lagts till.
- I kommandot "deno serve" har parallellisering av HTTP-serveroperationer med flera CPU-kärnor implementerats.
- I kommandot "deno coverage" har stöd för att spara rapporter i HTML-format lagts till.
- Prestandan har optimerats.

Huvudfunktioner i Deno:
- Säkerhetsinriktning i standardkonfigurationen. Åtkomst till filer, nätverksfunktioner och miljövariabler är som standard blockerad och kräver explicit aktivering. Standardapplikationer körs i isolerade sandbox-miljöer och kan inte få åtkomst till systemfunktioner utan att ge explicita behörigheter;
- Inbyggt stöd för TypeScript utöver JavaScript. Typkontroll och generering av JavaScript utförs av den inbyggda TypeScript-kompileraren, vilket leder till en prestandaförlust jämfört med tolkning av JavaScript i V8;
- Körning levereras i formen av en självständig körbar fil ("deno"). För att köra applikationer med Deno räcker det att ladda ner en körbar fil för din plattform, som är ungefär 40 MB stor, utan externa beroenden och utan att kräva någon särskild installation i systemet. Deno är inte en monolitisk applikation, utan en samling av crate-paket i Rust (deno_core, rusty_v8) som kan användas separat;
- Vid körning av programmet samt för inladdning av moduler kan adressering göras via URL. Till exempel, för att köra programmet welcome.js kan kommandot "deno https://deno.land/std/examples/welcome.js" användas. Koden från externa resurser laddas ner och cachelagras på det lokala systemet, men uppdateras aldrig automatiskt (för att uppdatera krävs att applikationen körs med flaggan "—reload");
- Effektiv hantering av HTTP-nätringförfrågningar, plattformen är designad för att skapa högpresterande nätverksapplikationer;
- Möjlighet att skapa universella web-applikationer som kan köras både i Deno och i en vanlig webbläsare;
- Det finns en standarduppsättning moduler vars användning inte kräver koppling till externa beroenden. Modulerna från den standardiserade kollektionen har genomgått en extra granskning och kontroll av kompatibilitet.
- Förutom runtime fungerar Deno-plattformen även som en pakethanterare och gör det möjligt att referera till moduler via URL i koden. Till exempel kan du ange i koden "import * as log from "https://deno.land/std/log/mod.ts" för att ladda en modul. Filer som laddas från externa servrar via URL cachas. Versionsbindningar för moduler definieras genom angivanden av versionsnummer i URL:en, till exempel "https://unpkg.com/liltest@0.0.5/dist/liltest.js".
- Inriktning på att använda webbstandarder, stöd för Promise, fetch och ECMAScript-moduler.
- Kompatibilitet med paket som finns på NPM-repositoriet och är skapade för Node.js-plattformen.
- Integrationen omfattar ett system för inspektion av beroenden (kommandot «deno info») och ett verktyg för kodformatering (deno fmt);
- Alla applikationens skript kan kombineras till en enda JavaScript-fil.
Källa: opennet.ru

