Het Deno JavaScript-platform is compatibel met NPM-modules

Deno 1.28 is uitgebracht, een raamwerk voor het sandboxen van JavaScript- en TypeScript-applicaties dat kan worden gebruikt om server-side handlers te maken. Het platform is ontwikkeld door Ryan Dahl, de maker van Node.js. Net als Node.js gebruikt Deno de V8 JavaScript-engine, die ook wordt gebruikt in Chromium-gebaseerde browsers. Tegelijkertijd is Deno geen afsplitsing van Node.js, maar een nieuw project dat helemaal opnieuw is gemaakt. De projectcode wordt gedistribueerd onder de MIT-licentie. Builds zijn voorbereid voor Linux, Windows en macOS.

Het Deno-project is gemaakt om gebruikers een veiligere omgeving te bieden en conceptuele fouten in de Node.js-architectuur te elimineren. Om de veiligheid te verbeteren is de V8-engine geschreven in Rust, waardoor veel van de kwetsbaarheden die voortkomen uit geheugenmanipulatie op laag niveau worden vermeden. Om verzoeken op een niet-blokkerende manier te verwerken, wordt het Tokio-platform, eveneens geschreven in Rust, gebruikt. Met Tokio kunt u hoogwaardige applicaties maken op basis van gebeurtenisgestuurde architectuur, die multi-threading ondersteunen en netwerkverzoeken in asynchrone modus verwerken.

Een belangrijke verandering in de nieuwe release is de stabilisatie van de compatibiliteit met pakketten die worden gehost in de NPM-repository, waardoor Deno meer dan 1.3 miljoen modules kan gebruiken die zijn gemaakt voor het Node.js-platform. Op Deno gebaseerde applicaties kunnen nu bijvoorbeeld gebruik maken van persistente datatoegangsmodules zoals Prisma, Mongoose en MySQL, evenals front-end frameworks zoals React en Vue. Sommige NPM-modules blijven nog steeds incompatibel met Deno, bijvoorbeeld vanwege bindingen met Node.js-specifieke omgevingselementen zoals het package.json-bestand. Ook is het nog niet mogelijk om het commando "deno compile" te gebruiken met NPM-modules. Toekomstige releases zijn van plan deze incompatibiliteiten en beperkingen aan te pakken.

Ondersteuning voor Deno's eerder gebruikte ECMAScript-modulesysteem en Web API-model blijft op hetzelfde niveau behouden, en Deno's vertrouwde op URL gebaseerde laadschema wordt gebruikt om NPM-modules te importeren. Om toegang te krijgen tot NPM-modules is er een speciaal URL-voorvoegsel “npm:”, dat op dezelfde manier kan worden gebruikt als gewone Deno-modules. Om bijvoorbeeld een NPM-module te importeren, kunt u 'import { chalk } from "npm:chalk@5";' specificeren, en een NPM-script uitvoeren vanaf de opdrachtregel - "deno run --allow-env --allow -lees npm:create-vite-extra.”

Het gebruik van NPM-pakketten in Deno is veel eenvoudiger dan in Node.js, omdat het niet nodig is om modules vooraf te installeren (modules worden geïnstalleerd wanneer de applicatie voor het eerst wordt gestart), er geen package.json-bestand is en er geen standaard node_modules is directory (modules worden in de gedeelde map in de cache opgeslagen, maar het is mogelijk om het oude gedrag terug te geven met behulp van de optie “--node-modules-dir”).

Op NPM gebaseerde applicaties behouden de mogelijkheid om Deno's toegangscontrole-, isolatie- en activeringsmechanismen te gebruiken voor beveiligingsgevoelige geavanceerde functies. Om aanvallen via twijfelachtige afhankelijkheden tegen te gaan, blokkeert Deno standaard alle pogingen om toegang te krijgen tot het systeem vanuit afhankelijkheden en geeft het een waarschuwing weer over gedetecteerde problemen. Wanneer een module bijvoorbeeld schrijftoegang tot /usr/bin/ probeert te krijgen, wordt een bevestigingsverzoek voor deze bewerking weergegeven: deno run npm:install-malware ⚠️ ┌ Deno vraagt ​​schrijftoegang tot /usr/bin/. ├ Aangevraagd door `install-malware` ├ Voer opnieuw uit met --allow-write om deze prompt te omzeilen. └ Toestaan? [j/n] (y = ja, toestaan; n = nee, ontkennen) >

Niet-NPM-verbeteringen in de nieuwe versie omvatten het updaten van de V8-engine naar release 10.9, automatische detectie van bestanden met vergrendelingen, stabilisatie van de Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() en Deno API's..uid(), met toevoeging van nieuwe onstabiele API Deno.Command() voor het uitvoeren van opdrachten (universele vervanging voor Deno.spawn, Deno.spawnSync en Deno.spawnChild).

Belangrijkste kenmerken van Deno:

  • Op beveiliging gerichte standaardconfiguratie. Bestandstoegang, netwerken en toegang tot omgevingsvariabelen zijn standaard uitgeschakeld en moeten expliciet worden ingeschakeld. Applicaties draaien standaard in geïsoleerde sandbox-omgevingen en hebben geen toegang tot systeemmogelijkheden zonder expliciete toestemming te verlenen;
  • Ingebouwde ondersteuning voor TypeScript naast JavaScript. Voor typecontrole en het genereren van JavaScript wordt de standaard TypeScript-compiler gebruikt, wat leidt tot prestatievermindering vergeleken met JavaScript-parsing in V8;
  • Runtime wordt geleverd in de vorm van een enkel op zichzelf staand uitvoerbaar bestand (“deno”). Om applicaties uit te voeren met Deno hoeft u slechts één uitvoerbaar bestand voor uw platform te downloaden, ongeveer 30 MB groot, dat geen externe afhankelijkheden heeft en geen speciale installatie op het systeem vereist. Bovendien is deno geen monolithische applicatie, maar een verzameling Rust-kratpakketten (deno_core, rusty_v8), die afzonderlijk kunnen worden gebruikt;
  • Bij het starten van het programma en bij het laden van modules kunt u URL-adressering gebruiken. Om bijvoorbeeld het welcome.js-programma uit te voeren, kunt u de opdracht “deno https://deno.land/std/examples/welcome.js” gebruiken. Code van externe bronnen wordt gedownload en in de cache opgeslagen op het lokale systeem, maar wordt nooit automatisch bijgewerkt (bijwerken vereist dat de applicatie expliciet wordt uitgevoerd met de vlag “--reload”);
  • Efficiënte verwerking van netwerkverzoeken via HTTP in applicaties; het platform is ontworpen voor het creëren van krachtige netwerkapplicaties;
  • De mogelijkheid om universele webapplicaties te maken die zowel in Deno als in een gewone webbrowser kunnen worden uitgevoerd;
  • De aanwezigheid van een standaardset modules, waarvan het gebruik geen binding aan externe afhankelijkheden vereist. Modules uit de standaardcollectie hebben aanvullende audit- en compatibiliteitstesten ondergaan;
  • Naast runtime fungeert het Deno-platform ook als pakketbeheerder en geeft u toegang tot modules via URL in de code. Om bijvoorbeeld een module te laden, kunt u in de code “import * as log from “https://deno.land/std/log/mod.ts” opgeven. Bestanden die via een URL van externe servers zijn gedownload, worden in de cache opgeslagen. De binding aan moduleversies wordt bepaald door versienummers in de URL op te geven, bijvoorbeeld “https://unpkg.com/[e-mail beveiligd]/dist/liltest.js";
  • De structuur omvat een geïntegreerd inspectiesysteem voor afhankelijkheid (de opdracht “deno info”) en een hulpprogramma voor het formatteren van code (deno fmt);
  • Alle applicatiescripts kunnen worden gecombineerd in één JavaScript-bestand.

Bron: opennet.ru

Voeg een reactie