Die Deno JavaScript-platform is versoenbaar met NPM-modules

Deno 1.28 is vrygestel, 'n raamwerk vir sandboxing van JavaScript en TypeScript-toepassings wat gebruik kan word om bedienerkant-hanteerders te skep. Die platform is ontwikkel deur Ryan Dahl, die skepper van Node.js. Soos Node.js, gebruik Deno die V8 JavaScript-enjin, wat ook in Chromium-gebaseerde blaaiers gebruik word. Terselfdertyd is Deno nie 'n vurk van Node.js nie, maar is dit 'n nuwe projek wat van nuuts af geskep is. Die projekkode word onder die MIT-lisensie versprei. Bouwerk is voorberei vir Linux, Windows en macOS.

Die Deno-projek is geskep om gebruikers van 'n veiliger omgewing te voorsien en konseptuele foute in die Node.js-argitektuur uit te skakel. Om sekuriteit te verbeter, is die V8-enjin in Rust geskryf, wat baie van die kwesbaarhede vermy wat voortspruit uit laevlakgeheuemanipulasie. Om versoeke in 'n nie-blokkerende modus te verwerk, word die Tokio-platform, wat ook in Rust geskryf is, gebruik. Tokio laat jou toe om hoëprestasie-toepassings te skep gebaseer op gebeurtenisgedrewe argitektuur, wat multi-threading en verwerking van netwerkversoeke in asinchroniese modus ondersteun.

'n Sleutelverandering in die nuwe vrystelling is die stabilisering van verenigbaarheid met pakkette wat in die NPM-bewaarplek aangebied word, wat Deno toelaat om meer as 1.3 miljoen modules te gebruik wat vir die Node.js-platform geskep is. Byvoorbeeld, Deno-gebaseerde toepassings kan nou volgehoue ​​datatoegangsmodules soos Prisma, Mongoose en MySQL gebruik, sowel as front-end raamwerke soos React en Vue. Sommige NPM-modules bly steeds onversoenbaar met Deno, byvoorbeeld as gevolg van bindings aan Node.js-spesifieke omgewingselemente soos die package.json-lêer. Dit is ook nog nie moontlik om die "deno compile"-opdrag met NPM-modules te gebruik nie. Toekomstige vrystellings beplan om hierdie onversoenbaarheid en beperkings aan te spreek.

Ondersteuning vir Deno se voorheen gebruikte ECMAScript-modulestelsel en Web API-model word op dieselfde vlak behou, en Deno se bekende URL-gebaseerde laaiskema word gebruik om NPM-modules in te voer. Om toegang tot NPM-modules te verkry, is daar 'n spesiale URL-voorvoegsel "npm:", wat op dieselfde manier as gewone Deno-modules gebruik kan word. Byvoorbeeld, om 'n NPM-module in te voer, kan jy 'import { chalk } from "npm:chalk@5";' spesifiseer, en om 'n NPM script vanaf die opdragreël te laat loop - "deno run --allow-env --allow -lees npm:create- vite-extra."

Die gebruik van NPM-pakkette in Deno is baie makliker as in Node.js, aangesien dit nie nodig is om modules vooraf te installeer nie (modules word geïnstalleer wanneer die toepassing die eerste keer geloods word), daar is geen package.json-lêer nie, en daar is geen verstek node_modules gids (modules word in die gedeelde gids gekas, maar dit is moontlik om die ou gedrag terug te keer deur die opsie "--node-modules-dir" te gebruik).

NPM-gebaseerde toepassings behou die vermoë om Deno se toegangsbeheer, isolasie en sekuriteitsensitiewe gevorderde vermoëns te gebruik. Om aanvalle deur twyfelagtige afhanklikhede teë te werk, blokkeer Deno by verstek alle pogings om toegang tot die stelsel van afhanklikhede te verkry en wys 'n waarskuwing oor probleme wat opgespoor is. Byvoorbeeld, wanneer 'n module probeer om skryftoegang tot /usr/bin/ te kry, sal 'n bevestigingsversoek vir hierdie bewerking vertoon word: deno run npm:install-malware ⚠️ ┌ Deno versoek skryftoegang na /usr/bin/. ├ Versoek deur `install-malware` ├ Hardloop weer met --allow-write om hierdie prompt te omseil. └ Laat toe? [j/n] (y = ja, laat toe; n = nee, ontken) >

Nie-NPM-verbeterings in die nuwe weergawe sluit in die opdatering van die V8-enjin om 10.9 vry te stel, outomatiese opsporing van lêers met slotte, stabilisering van die Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() en Deno API's. .uid(), wat nuwe onstabiele API Deno.Command() byvoeg vir die uitvoer van opdragte (universele vervanging vir Deno.spawn, Deno.spawnSync en Deno.spawnChild).

Belangrikste kenmerke van Deno:

  • Sekuriteit-georiënteerde verstek konfigurasie. Lêertoegang, netwerkvorming en toegang tot omgewingsveranderlikes is by verstek gedeaktiveer en moet uitdruklik geaktiveer word. Toepassings loop by verstek in geïsoleerde sandbox-omgewings en kan nie toegang tot stelselvermoëns kry sonder om eksplisiete toestemmings te gee nie;
  • Ingeboude ondersteuning vir TypeScript buite JavaScript. Vir tipe kontrolering en JavaScript-generering word die standaard TypeScript-samesteller gebruik, wat lei tot 'n daling in werkverrigting in vergelyking met JavaScript-parsering in V8;
  • Looptyd kom in die vorm van 'n enkele selfstandige uitvoerbare lêer ("deno"). Om toepassings met Deno te laat loop, hoef jy net een uitvoerbare lêer vir jou platform af te laai, ongeveer 30 MB groot, wat geen eksterne afhanklikhede het nie en geen spesiale installasie op die stelsel vereis nie. Boonop is deno nie 'n monolitiese toepassing nie, maar is 'n versameling Rust-kratpakkette (deno_core, rusty_v8), wat afsonderlik gebruik kan word;
  • Wanneer u die program begin, sowel as om modules te laai, kan u URL-adressering gebruik. Byvoorbeeld, om die welcome.js-program te laat loop, kan jy die opdrag "deno https://deno.land/std/examples/welcome.js" gebruik. Kode van eksterne bronne word afgelaai en op die plaaslike stelsel in die kas gestoor, maar word nooit outomaties opgedateer nie (opdatering vereis dat die toepassing uitdruklik met die "--herlaai"-vlag uitgevoer word);
  • Doeltreffende verwerking van netwerkversoeke via HTTP in toepassings; die platform is ontwerp vir die skep van hoëprestasie-netwerktoepassings;
  • Die vermoë om universele webtoepassings te skep wat beide in Deno en in 'n gewone webblaaier uitgevoer kan word;
  • Die teenwoordigheid van 'n standaard stel modules, waarvan die gebruik nie binding aan eksterne afhanklikhede vereis nie. Modules uit die standaardversameling het bykomende oudit- en versoenbaarheidstoetse ondergaan;
  • Benewens runtime, dien die Deno-platform ook as 'n pakketbestuurder en laat u toegang tot modules deur URL binne die kode. Byvoorbeeld, om 'n module te laai, kan jy in die kode "import * as log from" https://deno.land/std/log/mod.ts spesifiseer. Lêers wat vanaf eksterne bedieners via URL afgelaai word, word gekas. Binding aan moduleweergawes word bepaal deur weergawenommers binne die URL te spesifiseer, byvoorbeeld "https://unpkg.com/[e-pos beskerm]/dist/liltest.js";
  • Die struktuur sluit 'n geïntegreerde afhanklikheidsinspeksiestelsel in (die "deno info"-opdrag) en 'n nut vir kodeformatering (deno fmt);
  • Alle toepassingsskrifte kan in een JavaScript-lêer gekombineer word.

Bron: opennet.ru

Voeg 'n opmerking