Što je Deno? 'Bolji' Node.js

Ako vam se sviđa Node.js, ali ne i njegov upravitelj paketa npm, ili želite sigurnije JavaScript runtime okruženje od Node.js, možda ćete pronaći novi projekt otvorenog koda Deno od interesa (riječ Deno je anagram Node). S druge strane, ako koristite Node.js u proizvodnji, ovdje se nema što vidjeti, krenite dalje - Deno je još uvijek "u velikoj je fazi izrade".

Deno je program za pokretanje JavaScript i TypeScript koda izvan preglednika. Riječ je o najnovijem naporu na čijem je čelu Ryan Dahl, koji je 2009. godine osnovao projekt Node.js, a pokušaj je reimagine Node.js u svjetlu napretka u JavaScript-u od 2009. godine, uključujući TypeScript prevodilac Poput Node.js, Deno je u osnovi ljuska oko Google V8 JavaScript motora, iako za razliku od Node.js uključuje prevodilac TypeScript u izvršnu sliku.

Deno i napredni JavaScript

Prema Dahlu, JavaScriptu je 2009. nedostajalo nekoliko značajki koje bi bile korisne za Node.js. Nekoliko ih je tijekom godina dodano u JavaScript kao dio standarda ECMAScript (ES), a TypeScript je riješio još nekoliko.

JavaScript je događaje i povratne pozive u osnovi imao zauvijek, ali oni mogu dovesti do prilično složenog koda, posebno kada želite povezati asinkrone radnje. Obećanja čine sintaksu malo čitljivijom. A promiseje vraćeni objekt koji predstavlja eventualni završetak ili neuspjeh asinkrone operacije, kojem možete pridružiti povratne pozive, za razliku od prosljeđivanja povratnih poziva u funkciju. Deklariranje funkcije asyncdodatno pojednostavljuje sintaksu, omogućujući vam da awaitunutar funkcije pauzirate na neblokirajući način dok se obećanje ne riješi.

Kad je stvoren Node.js, de facto standard za JavaScript module bio je CommonJS, što npm podržava. Od tada je odbor ECMAScript službeno blagoslovio drugačiji standard, ES Modules, što jspm podržava. Deno podržava ES module.

Tipizirani nizovi su ES6 API za rukovanje binarnim podacima, nešto što je Node.js mogao koristiti; nedostatak podrške za binarne podatke doveo je do nekih problema s dizajnom Node.js. Deno koristi tipkane nizove kada treba manipulirati sirovim binarnim podacima. Node.js sada podržava otkucane nizove za korisnički kod.

TypeScript je otkucani nabor JavaScripta koji se kompajlira u obični JavaScript (ES3 ili noviji; može se konfigurirati). TypeScript dodaje neobavezne vrste, klase i module u JavaScript i podržava alate za velike JavaScript aplikacije. (Anders Hejlsberg to naziva "JavaScript koji se skalira.") Kao što je ranije spomenuto, Deno sadrži sliku TypeScript prevoditelja kao dio svog vremena izvođenja. Ako proslijedite Deno datoteku TypeScript, prvo će je kompajlirati u JavaScript, a zatim proslijediti V8 mašini.

Nedostaci dizajna Node.js-a

Prema Dahlu, koji je nakon svega dizajnirao i Node.js i Deno, Node.js pati od tri glavna problema s dizajnom:

  • loše dizajniran modularni sustav s centraliziranom distribucijom;
  • puno naslijeđenih API-ja koji moraju biti podržani;
  • i nedostatak sigurnosti.

Deno rješava sva tri problema. 

Deno sigurno izvršenje

Način na koji Deno poboljšava sigurnost nad Node.js-om jednostavan je: Deno po zadanom ne dopušta programu pristup disku, mreži, potprocesima ili varijablama okoline. Kada trebate dopustiti bilo što od toga, možete se uključiti s zastavicom naredbenog retka, koja može biti granulirana koliko želite, na primjer --allow-read=/tmpili --allow-net=google.com. Još jedno sigurnosno poboljšanje u Denou je to što uvijek umire na neuhvaćenim pogreškama, za razliku od Node.js, što će omogućiti da se izvršavanje nastavi nakon neuhvaćene pogreške, što rezultira rezultatima koji nisu možda predvidljivi.

Deno moduli

U Node.js učitavate module CommonJS pomoću requireključne riječi i svi oni, standardni i nezavisni, implicitno dolaze s npmjs.com. U Denou učitavate ES module pomoću importključne riječi i izričito navodite URL. Na primjer:

uvoz * kao zapis iz "//deno.land/std/log/mod.ts";

Deno moduli se mogu hostirati bilo gdje - ne postoji centralizirano spremište za module treće strane. Uz to, moduli se uvijek predmemoriraju i kompajliraju lokalno i ne ažuriraju se ako izričito ne zatražite osvježavanje. Stoga biste trebali moći pokretati programe Deno koji su već na vašem prijenosnom računalu, sve dok su svi uvozi jednom riješeni, čak i ako se nalazite u avionu bez povezivanja.

Deno ima centraliziranu kolekciju standardnih modula koji nemaju vanjske ovisnosti i pregledava ih Denoov temeljni tim; živi na poslužitelju deno.land. Zbirka modula deno_std labava je luka Goove standardne biblioteke.

Iza tog izbora modela knjižnice stoji malo povijesti. Dahl je svoj prototip Denoa napisao prvenstveno na jeziku Go, ali je otkrio potencijalne sukobe između sakupljača smeća u Gou i V8. Zatim su on i njegovi suradnici prepisali ispravni Deno s V8, Rust i Rust asinkroni I / O paket Tokio. Primijenili su standardnu ​​knjižnicu Deno u TypeScript-u.

U ovom je trenutku Deno razumno i zabavno okruženje za izgradnju malih privatnih projekata skriptiranja u TypeScript-u. Prema Dahlu, Deno nikada stvarno neće utjecati na uspjeh Node.js. Ipak, nakon što Deno dosegne verziju 1.0, mogao bi postati održiv izbor za izgradnju većih projekata.