Programmering

Hvad er Deno? En 'bedre' Node.js

Hvis du kan lide Node.js, men ikke dets pakkehåndteringsnpm, eller hvis du vil have et mere sikkert JavaScript-runtime-miljø end Node.js, kan du muligvis finde det nye open source-projekt Deno af interesse (ordet Deno er et anagram over Node). På den anden side, hvis du bruger Node.js i produktion, er der intet at se her, gå videre - Deno er stadig "meget under udvikling."

Deno er et program til at køre JavaScript og TypeScript-kode uden for en browser. Det er den seneste indsats, der blev ført af Ryan Dahl, der grundlagde Node.js-projektet i 2009, og det er et forsøg på at gentænke Node.js i lyset af fremskridtene inden for JavaScript siden 2009, inklusive TypeScript-kompilatoren. Ligesom Node.js er Deno i det væsentlige en skal omkring Google V8 JavaScript-motoren, selvom den i modsætning til Node.js inkluderer TypeScript-kompilatoren i sit eksekverbare billede.

Deno og avanceret JavaScript

I 2009 manglede JavaScript flere funktioner, der ville have været nyttige for Node.js, ifølge Dahl. Et par af disse er blevet føjet til JavaScript gennem årene som en del af ECMAScript (ES) -standarden, og TypeScript har adresseret et par flere.

JavaScript har haft begivenheder og tilbagekald i det væsentlige for evigt, men de kan føre til ret kompliceret kode, især når du vil kæde asynkrone handlinger. Løfter gør syntaksen lidt mere læselig. EN løfte er et returneret objekt, der repræsenterer den endelige afslutning eller fiasko af en asynkron operation, som du kan knytte tilbagekald til, i modsætning til at sende tilbagekald til en funktion. Erklæring om en funktion asynkronisering yderligere forenkler syntaksen, så du kan bruge den vente inden for funktionen til pause på en ikke-blokerende måde, indtil løftet afvikles.

Da Node.js blev oprettet, var de facto-standarden for JavaScript-moduler CommonJS, hvilket er det, som npm understøtter. Siden da har ECMAScript-udvalget officielt velsignet en anden standard, ES-moduler, hvilket jspm støtter. Deno understøtter ES-moduler.

Typede arrays er en ES6 API til håndtering af binære data, noget Node.js kunne have brugt; manglen på binær datasupport førte til nogle Node.js designproblemer. Deno bruger typiske arrays, når det er nødvendigt at manipulere rå binære data. Node.js understøtter nu typiske arrays for brugerkode.

TypeScript er et skrevet supersæt af JavaScript, der kompileres til almindeligt JavaScript (ES3 eller højere; det kan konfigureres). TypeScript tilføjer valgfri typer, klasser og moduler til JavaScript og understøtter værktøjer til JavaScript-applikationer i stor skala. (Anders Hejlsberg kalder det "JavaScript, der skalerer.") Som tidligere nævnt indeholder Deno et billede af TypeScript-kompilatoren som en del af dens kørselstid. Hvis du sender Deno en TypeScript-fil, kompilerer den først til JavaScript og sender den derefter til V8-motoren.

Node.js designmangler

Ifølge Dahl, der trods alt designede både Node.js og Deno, lider Node.js under tre store designproblemer:

  • et dårligt designet modulsystem med central distribution
  • masser af ældre API'er, der skal understøttes;
  • og manglende sikkerhed.

Deno løser alle tre problemer.

Deno sikker udførelse

Måden Deno forbedrer sikkerheden over Node.js er enkel: Deno tillader som standard ikke et programadgangsdisk, netværk, underprocesser eller miljøvariabler. Når du har brug for at tillade nogen af ​​disse, kan du tilmelde dig med et kommandolinjeflag, der kan være så detaljeret, som du vil, for eksempel --allow-read = / tmp eller --allow-net = google.com. En anden sikkerhedsforbedring i Deno er, at den altid dør på ufangede fejl i modsætning til Node.js, som gør det muligt at udføre efter en ufanget fejl med resultater, der muligvis ikke kan forudsiges.

Denomoduler

I Node.js indlæser du CommonJS-moduler ved hjælp af kræve nøgleord, og de kommer alle, både standard og tredjepart, implicit fra npmjs.com. I Deno indlæser du ES-moduler ved hjælp af importere nøgleord og angiv eksplicit URL. For eksempel:

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

Deno-moduler kan hostes hvor som helst - der er ikke noget central lager til tredjepartsmoduler. Derudover gemmes moduler altid i cache og kompileres lokalt og opdateres ikke, medmindre du udtrykkeligt beder om en opdatering. Derfor skal du være i stand til at køre Deno-programmer, der allerede findes på din bærbare computer, så længe al import er løst en gang, selvom du er i et fly uden forbindelse.

Deno har en centraliseret samling af standard moduler, der ikke har eksterne afhængigheder og gennemgås af Deno-kerneteamet; den lever på deno.land-serveren. Deno_std-modulkollektionen er en løs havn i Go's standardbibliotek.

Der er en lille historie bag dette valg af model til biblioteket. Dahl skrev sin prototype af Deno primært på Go-sproget, men opdagede potentielle konflikter mellem affaldssamlerne i Go og V8. Han og hans samarbejdspartnere omskrev derefter Deno proper med V8, Rust og Rust asynkron I / O-pakke Tokio. De implementerede Deno-standardbiblioteket i TypeScript.

På dette tidspunkt er Deno et fornuftigt og sjovt miljø at bruge til at opbygge små private scripting-projekter i TypeScript. Ifølge Dahl vil Deno aldrig rigtig påvirke succesen med Node.js. Ikke desto mindre, når Deno når version 1.0, kan det meget vel blive et levedygtigt valg til at bygge større projekter.