Programmering

Hva er Deno? En ‘bedre’ Node.js

Hvis du liker Node.js, men ikke pakkeadministratorens npm, eller hvis du vil ha et sikrere JavaScript-runtime-miljø enn Node.js, kan det hende du finner det nye open source-prosjektet Deno av interesse (ordet Deno er et anagram over Node). På den annen side, hvis du bruker Node.js i produksjon, er det ingenting å se her, gå videre - Deno er fortsatt "veldig under utvikling."

Deno er et program for å kjøre JavaScript og TypeScript-kode utenfor en nettleser. Det er den siste innsatsen som ble ledet av Ryan Dahl, som grunnla Node.js-prosjektet i 2009, og det er et forsøk på å forestille seg Node.js på nytt i lys av fremskrittene i JavaScript siden 2009, inkludert TypeScript-kompilatoren. I likhet med Node.js er Deno egentlig et skall rundt Google V8 JavaScript-motoren, selv om den i motsetning til Node.js inkluderer TypeScript-kompilatoren i det kjørbare bildet.

Deno og avansert JavaScript

I 2009 manglet JavaScript flere funksjoner som ville ha vært nyttige for Node.js, ifølge Dahl. Noen få av disse har blitt lagt til JavaScript gjennom årene som en del av ECMAScript (ES) -standarden, og TypeScript har adressert noen flere.

JavaScript har hatt hendelser og tilbakeringinger i det vesentlige for alltid, men de kan føre til ganske komplisert kode, spesielt når du vil kjede asynkrone handlinger. Løfter gjør syntaksen litt mer lesbar. EN love er et returnert objekt som representerer den endelige fullføringen eller feilen i en asynkron operasjon, som du kan knytte tilbakeringing til, i motsetning til å sende tilbakeringinger til en funksjon. Erklære en funksjon asynkronisering forenkler syntaksen ytterligere, slik at du kan bruke den avvente innenfor funksjonen for å stoppe på en ikke-blokkerende måte til løftet løser seg.

Da Node.js ble opprettet, var de facto-standarden for JavaScript-moduler CommonJS, som er det som npm støtter. Siden da velsignet ECMAScript-komiteen offisielt en annen standard, ES Modules, som er det jspm støtter. Deno støtter ES-moduler.

Typede matriser er en ES6 API for håndtering av binære data, noe Node.js kunne ha brukt; mangelen på binær datastøtte førte til noen Node.js-designproblemer. Deno bruker typede matriser når den trenger å manipulere rå binære data. Node.js støtter nå typede matriser for brukerkode.

TypeScript er et skrevet supersett av JavaScript som kompileres til vanlig JavaScript (ES3 eller høyere; det kan konfigureres). TypeScript legger til valgfrie typer, klasser og moduler i JavaScript, og støtter verktøy for JavaScript-applikasjoner i stor skala. (Anders Hejlsberg kaller det "JavaScript som skalerer.") Som nevnt tidligere inneholder Deno et bilde av TypeScript-kompilatoren som en del av kjøretiden. Hvis du sender Deno en TypeScript-fil, vil den først kompilere den til JavaScript og deretter sende den til V8-motoren.

Node.js designfeil

I følge Dahl, som tross alt designet både Node.js og Deno, lider Node.js av tre store designproblemer:

  • et dårlig designet modulsystem, med sentralisert distribusjon;
  • mange eldre API-er som må støttes;
  • og mangel på sikkerhet.

Deno løser alle tre problemene.

Deno sikker utførelse

Måten Deno forbedrer sikkerheten over Node.js er enkel: Deno lar som standard ikke et program få tilgang til disk, nettverk, underprosesser eller miljøvariabler. Når du trenger å tillate noen av disse, kan du velge med et kommandolinjeflagg, som kan være så detaljert som du vil, for eksempel --allow-read = / tmp eller --allow-net = google.com. En annen sikkerhetsforbedring i Deno er at den alltid dør av ufangede feil, i motsetning til Node.js, som gjør at kjøringen kan fortsette etter en ufanget feil, med resultater som kanskje ikke er forutsigbare.

Denomoduler

I Node.js laster du inn CommonJS-moduler ved hjelp av krever søkeord, og de kommer alle, både standard og tredjepart, implisitt fra npmjs.com. I Deno laster du inn ES-moduler ved hjelp av import søkeord og oppgi nettadressen eksplisitt. For eksempel:

importere * som logg fra "//deno.land/std/log/mod.ts";

Deno-moduler kan være vert hvor som helst - det er ikke noe sentralisert lager for tredjepartsmoduler. I tillegg blir moduler alltid bufret og kompilert lokalt, og oppdateres ikke med mindre du eksplisitt ber om en oppdatering. Derfor bør du kunne kjøre Deno-programmer som allerede er på den bærbare datamaskinen, så lenge all import er løst en gang, selv om du er i et fly uten tilkobling.

Deno har en sentralisert samling av standard moduler som ikke har eksterne avhengigheter og blir gjennomgått av Deno-kjerneteamet; den lever på deno.land-serveren. Deno_std-modulsamlingen er en løs port i Go’s standardbibliotek.

Det ligger litt historie bak det valgte modellvalget for biblioteket. Dahl skrev sin prototype av Deno primært på Go-språket, men oppdaget potensielle konflikter mellom søppeloppsamlerne i Go og V8. Han og hans samarbeidspartnere omskrev deretter Deno proper med V8, Rust og Rust asynkron I / O-pakke Tokio. De implementerte Deno-standardbiblioteket i TypeScript.

På dette punktet er Deno et rimelig og morsomt miljø å bruke til å bygge små private skriptprosjekter i TypeScript. I følge Dahl vil Deno aldri virkelig påvirke suksessen til Node.js. Når Deno når versjon 1.0, kan det likevel bli et levedyktig valg for å bygge større prosjekter.