Was ist Deno? Ein 'besserer' Node.js.

Wenn Sie Node.js mögen, aber nicht den Paketmanager npm, oder eine sicherere JavaScript-Laufzeitumgebung als Node.js wünschen, ist das neue Open-Source-Projekt Deno von Interesse (das Wort Deno ist ein Anagramm von Node). Wenn Sie jedoch Node.js in der Produktion verwenden, gibt es hier nichts zu sehen. Machen Sie weiter - Deno befindet sich noch in der Entwicklung.

Deno ist ein Programm zum Ausführen von JavaScript- und TypeScript-Code außerhalb eines Browsers. Dies ist die jüngste Initiative von Ryan Dahl, der 2009 das Node.js-Projekt gründete, und es ist ein Versuch, Node.js angesichts der Fortschritte in JavaScript seit 2009, einschließlich des TypeScript-Compilers, neu zu definieren. Wie Node.js ist Deno im Wesentlichen eine Shell um die Google V8-JavaScript-Engine, obwohl es im Gegensatz zu Node.js den TypeScript-Compiler in sein ausführbares Image enthält.

Deno und fortgeschrittenes JavaScript

Im Jahr 2009 fehlten JavaScript laut Dahl mehrere Funktionen, die für Node.js nützlich gewesen wären. Einige davon wurden im Laufe der Jahre als Teil des ECMAScript (ES) -Standards zu JavaScript hinzugefügt, und TypeScript hat einige weitere angesprochen.

JavaScript hatte im Wesentlichen für immer Ereignisse und Rückrufe, die jedoch zu ziemlich kompliziertem Code führen können, insbesondere wenn Sie asynchrone Aktionen verketten möchten. Versprechen machen die Syntax etwas lesbarer. A promiseist ein zurückgegebenes Objekt, das den eventuellen Abschluss oder Fehler einer asynchronen Operation darstellt, an die Sie Rückrufe anhängen können, anstatt Rückrufe an eine Funktion zu übergeben. Durch das Deklarieren einer Funktion wird asyncdie Syntax weiter vereinfacht, sodass Sie awaitinnerhalb der Funktion eine nicht blockierende Pause einlegen können, bis das Versprechen erfüllt ist.

Bei der Erstellung von Node.js war CommonJS der De-facto-Standard für JavaScript-Module. Dies wird von npm unterstützt. Seitdem hat das ECMAScript-Komitee offiziell einen anderen Standard gesegnet, ES Modules, den jspm unterstützt. Deno unterstützt ES-Module.

Typisierte Arrays sind eine ES6-API für die Verarbeitung von Binärdaten, die Node.js hätte verwenden können. Der Mangel an Unterstützung für Binärdaten führte zu einigen Designproblemen bei Node.j. Deno verwendet typisierte Arrays, wenn es darum geht, binäre Rohdaten zu bearbeiten. Node.js unterstützt jetzt typisierte Arrays für Benutzercode.

TypeScript ist eine typisierte Obermenge von JavaScript, die zu einfachem JavaScript kompiliert wird (ES3 oder höher; konfigurierbar). TypeScript fügt JavaScript optionale Typen, Klassen und Module hinzu und unterstützt Tools für umfangreiche JavaScript-Anwendungen. (Anders Hejlsberg nennt es "JavaScript, das skaliert".) Wie bereits erwähnt, enthält Deno als Teil seiner Laufzeit ein Image des TypeScript-Compilers. Wenn Sie Deno eine TypeScript-Datei übergeben, wird diese zuerst in JavaScript kompiliert und dann an die V8-Engine übergeben.

Node.js Designmängel

Laut Dahl, der immerhin sowohl Node.js als auch Deno entworfen hat, leidet Node.js unter drei großen Designproblemen:

  • ein schlecht gestaltetes Modulsystem mit zentraler Verteilung;
  • viele ältere APIs, die unterstützt werden müssen;
  • und ein Mangel an Sicherheit.

Deno behebt alle drei Probleme. 

Deno sichere Ausführung

Die Art und Weise, wie Deno die Sicherheit gegenüber Node.js verbessert, ist einfach: Standardmäßig lässt Deno ein Programm nicht auf Datenträger, Netzwerk, Unterprozesse oder Umgebungsvariablen zugreifen. Wenn Sie eine dieser Optionen zulassen müssen, können Sie sich mit einem Befehlszeilenflag anmelden, das beispielsweise --allow-read=/tmpoder so beliebig detailliert sein kann --allow-net=google.com. Eine weitere Sicherheitsverbesserung in Deno besteht darin, dass es im Gegensatz zu Node.js immer bei nicht erfassten Fehlern stirbt, wodurch die Ausführung nach einem nicht erfassten Fehler fortgesetzt werden kann und die Ergebnisse möglicherweise nicht vorhersehbar sind.

Deno-Module

In Node.js laden Sie CommonJS-Module mit dem requireSchlüsselwort und alle, Standard- und Drittanbieter- Module , stammen implizit von npmjs.com. In Deno laden Sie ES-Module mit dem importSchlüsselwort und geben die URL explizit an. Zum Beispiel:

* als Protokoll aus "//deno.land/std/log/mod.ts" importieren;

Deno-Module können überall gehostet werden - es gibt kein zentrales Repository für Module von Drittanbietern. Darüber hinaus werden Module immer lokal zwischengespeichert und kompiliert und nicht aktualisiert, es sei denn, Sie fordern ausdrücklich eine Aktualisierung an. Daher sollten Sie in der Lage sein, Deno-Programme auszuführen, die sich bereits auf Ihrem Laptop befinden, solange alle Importe einmal aufgelöst wurden, auch wenn Sie sich in einem Flugzeug ohne Konnektivität befinden.

Deno verfügt über eine zentralisierte Sammlung von Standardmodulen , die keine externen Abhängigkeiten aufweisen und vom Deno-Kernteam überprüft werden. es lebt auf dem deno.land Server. Die deno_std-Modulauflistung ist ein loser Port der Standardbibliothek von Go.

Hinter dieser Modellwahl für die Bibliothek steckt ein wenig Geschichte. Dahl schrieb seinen Prototyp von Deno hauptsächlich in der Sprache Go, entdeckte jedoch mögliche Konflikte zwischen den Müllsammlern in Go und V8. Er und seine Mitarbeiter haben Deno dann mit V8, Rust und dem asynchronen Rust-E / A-Paket Tokio neu geschrieben. Sie implementierten die Deno-Standardbibliothek in TypeScript.

Zu diesem Zeitpunkt ist Deno eine vernünftige und unterhaltsame Umgebung zum Erstellen kleiner privater Skriptprojekte in TypeScript. Laut Dahl wird Deno den Erfolg von Node.js nie wirklich beeinflussen. Sobald Deno die Version 1.0 erreicht hat, ist es möglicherweise eine gute Wahl, um größere Projekte zu erstellen.