Version 1.28 of Deno has been released, a platform for isolated execution of applications in JavaScript and TypeScript, which can be used to create server-side handlers. The platform is developed by Ryan Dahl, the creator of Node.js. Like Node.js, Deno uses the JavaScript engine V8, which is also employed in browsers based on Chromium. However, Deno is not a branch of Node.js, but a completely new project built from scratch. The project's code is distributed under the MIT license. Builds are prepared for Linux, Windows, and macOS.
The Deno project was created to provide users with a more secure environment and to eliminate conceptual mistakes made in the architecture of Node.js. To enhance security, the wrapper around the V8 engine is written in Rust, which helps avoid many vulnerabilities arising from low-level memory operations. The Tokio platform, also written in Rust, is used for handling requests in a non-blocking manner. Tokio enables the creation of high-performance applications based on event-driven architecture that support multithreading and asynchronous handling of network requests.
A key change in the new release is the stabilization of compatibility with packages hosted in the NPM repository, allowing Deno to utilize over 1.3 million modules created for the Node.js platform. For instance, applications based on Deno can now use modules for persistent data access such as Prisma, Mongoose, and MySQL, as well as frameworks for front-end operations like React and Vue. Some NPM modules remain incompatible with Deno, often due to bindings to Node.js specific environmental elements, such as the package.json file. Additionally, the command 'deno compile' cannot be used with NPM modules at this time. Future releases are expected to address these incompatibilities and limitations.
Stödet för det tidigare tillĂ€mpade Deno-modellen baserat pĂ„ ECMAScript-modulsystemet och Web API har bevarats pĂ„ samma nivĂ„, och för import av NPM-moduler anvĂ€nds den bekanta Deno-laddningsschemat baserat pĂ„ URL. För att fĂ„ tillgĂ„ng till NPM-moduler finns det en speciell URL-prefix "npm:", som kan anvĂ€ndas pĂ„ samma sĂ€tt som vanliga Deno-moduler. Till exempel kan man för att importera en NPM-modul ange âimport { chalk } from "npm:chalk@5";â, och för att köra ett NPM-skript frĂ„n kommandoraden â "deno run --allow-env --allow-read npm:create-vite-extra".
AnvÀndningen av NPM-paket i Deno Àr betydligt enklare Àn i Node.js, eftersom det inte Àr nödvÀndigt att installera moduler i förvÀg (moduler installeras vid första körningen av programmet), filen package.json anvÀnds inte och standardkatalogen node_modules anvÀnds inte (moduler cachelagras i en gemensam katalog, men det finns möjlighet att ÄtergÄ till det gamla beteendet med alternativet "--node-modules-dir").
I NPM-baserade applikationer finns möjligheten att anvĂ€nda de Ă„tkomstbegrĂ€nsnings-, isolerings- och sĂ€kerhetsaktiveringsmekanismer som tillhandahĂ„lls i Deno. För att motverka angrepp genom osĂ€kra beroenden blockerar Deno som standard alla försök att fĂ„ systemĂ„tkomst frĂ„n beroenden och genererar en varning om identifierade problem. Till exempel, vid ett modulförsök att fĂ„ skrivĂ„tkomst till /usr/bin/ kommer en begĂ€ran om bekrĂ€ftelse pĂ„ denna operation att visas: deno run npm:install-malware â ïž â Deno begĂ€r skrivĂ„tkomst till /usr/bin/. â BegĂ€rd av `install-malware` â Kör igen med --allow-write för att gĂ„ förbi denna uppmaning. â TillĂ„t? [y/n] (y = ja, tillĂ„t; n = nej, neka) >
Bland de orelaterade förbÀttringarna i NPM nÀmns uppdateringen av V8-motorn till version 10.9, automatisk identifiering av lÄsningsfiler, stabilisering av API:erna Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() och Deno.uid(), samt tillÀgget av ett nytt instabilt API Deno.Command() för att köra kommandon (universell ersÀttning för Deno.spawn, Deno.spawnSync och Deno.spawnChild).
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;
- Runtime levereras i form av en fristÄende körbar fil ("deno"). För att köra applikationer med Deno rÀcker det med att ladda ner en körbar fil för din plattform, som Àr cirka 30 MB stor, utan externa beroenden och utan att krÀva nÄgon speciell installation i systemet. Deno Àr inte en monolitisk applikation utan en samling crate-paket skrivna 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".
- Integrationen omfattar ett system för inspektion av beroenden (kommandot «deno info») och ett verktyg för kodformatering (deno fmt);
- Alla applikationsscript kan kombineras till en enda JavaScript-fil.
KĂ€lla: opennet.ru
