Deno: Laufzeitumgebung für JavaScript und TypeScript

Deno ist eine radikal einfache Laufzeitumgebung für JavaScript und TypeScript. Sie bietet ihren Usern einenneuen, einfachen Weg serverseitig JavaScript und TypeScript zu schreiben. Die Plattform steht noch am Anfang ihrer Entwicklung, stellt aber bereits im frühen Stadium unter Beweis, dass sie langfristig die altbewährte Node.js-Runtime ablösen könnte. Diesen Schritt muss dann allerdings auch die JavaScript-Entwickler-Community mitgehen.

Es gibt Produkte, die werden von der Community geliebt, obwohl sie nicht perfekt sind. Die Skriptsprache JavaScript ist dafür ein gutes Beispiel. Trotz klarer Defizite ist sie eine der weltweit meist verwendeten Sprachen mit unzähligen Frameworks und Bibliotheken. Auch Node.js, der Quasi-Vorgänger von Deno, erfreut sich in der Community großer Beliebtheit. Der verantwortliche Entwickler Ryan Dahl will mit seinem neuen Deno-Projekt von den alten Erfahrungen mit Node.js profitieren und eine neue, sicherere, bessere Plattform bieten. Ob und wie das funktioniert, wird in diesem Artikel geklärt.

Was ist Deno?

Deno befindet sich noch in seiner Frühphase. Schnittstellen, Architektur- und Designentscheidungen sind noch nicht in Stein gemeißelt und werden sich sicherlich im Laufe der Entwicklung ändern. In einigen Punkten ist deshalb ein direkter Vergleich mit dem oben erwähnten Node.js nur schwer möglich. Eine grobe Gegenüberstellung hat der Entwickler beider Plattformen in folgendem YouTube-Video selbst vorgenommen:

Mit dem weiteren Klick laden Sie das Video von YouTube. In diesem Fall kann YouTube Cookies setzen, auf welche wir keinen Einfluss haben.

Deno und Node liegen nicht nur namentlich nah beieinander. Auch ihre Grundidee ist die gleiche: Sie bieten eine Plattform zur Ausführung von JavaScripts abseits vom Browser und die Möglichkeit, serverseitiges JavaScript – oder TypeScript – zu schreiben. Dafür bedienen sie sich bei verschiedenen, bereits vorhandenen Projekten – sie sind also keine vollständige Eigenimplementierung. Für die Ausführung von JavaScript in verschiedenen Umgebungen kommt beispielsweise standardmäßig die Google-Engine V8 zum Einsatz, die in den Browsern Chrome und Edge bereits integriert ist. Serverseitig setzt Deno daher wie Node.js auf V8.

So viel zu den Gemeinsamkeiten, doch im Gegensatz zu Node, das mit C++ geschrieben ist, nutzt Deno die innovative und wesentlich sicherere Programmiersprache Rust von Mozilla Research. Damit ermöglicht Deno das direkte Schreiben von statisch typisiertem Code, was nahezu ein Alleinstellungsmerkmal ist.

Die Features von Deno: Out of the box

Deno hat zwei Funktionen, die zu einer extremen Vereinfachung des Workflows führen: Zum einen setzt die Laufzeitumgebung auf ein einfaches Modulsystem, bei dem URLs und Module in Eins-zu-eins-Korrespondenz stehen. Zum anderen ermöglicht Deno, TypeScript-Codes frei auszuführen.

Mehr Freiheit für die Entwickler bedeutet in der Regel ein höheres Sicherheitsrisiko bei der Anwendung. Deno ist in punkto Sicherheit aber sehr ausgereift. Für gewöhnlich werden Skripte in einer vom Betriebssystem abgetrennten Sandbox ausgeführt. Entwickler haben begrenzt die Möglichkeit, weitere Funktionen hinzuzufügen.

Deno ist im Vergleich viel näher an die User-Experience im Web angelehnt: Per Standard ist der Zugriff aufs System verriegelt und der User muss den Zugriff einer Applikation auf das System erst erlauben, andernfalls sind beide perfekt voneinander isoliert. Vergleichbar ist das mit dem Verhalten eines Browsers, wenn beispielsweise bei einer Web-Videokonferenz nach dem Zugriff auf die Webcam und das Mikrofon gefragt wird. Erst durch die Zustimmung des Users kann auf die Ressourcen zurückgegriffen werden. Vereinfacht ausgedrückt verhält sich Deno wie ein Browser für Kommandozeilen-Skripte.

Ferner greift Deno den bedeutendsten Trend in der JavaScript-Entwicklung auf: Die native Unterstützung von TypeScript.

Hinweis

TypeScript unterscheidet sich von der Programmiersprache JavaScript vor allem im Feld der Typisierung. JavaScript lässt bei der Typisierung von Variablen und Funktionen (zu) viel Freiheit. Hier werden keine Vorgaben erwartet, welcher Typ eine Variable sein oder eine Funktion ausgeben soll. Das erschwert das Lesen und Verstehen eines Codes. In TypeScript ist es Standard, jede Variable mit einem Typ zu versehen. Funktion und Ausgabe sind also bereits im Vorfeld typisiert. Eine fehlerhafte Zuordnung wird außerdem sofort gemeldet.

Um den mit Deno generierten TypeScript-Code in JavaScript umzuwandeln und auszuführen, muss kein zusätzlicher Compiler-Schritt mehr gemacht werden. Immer, wenn Daten ausgetauscht werden, passiert das in Paketen. Demzufolge braucht Deno kein externes Paket wie ts-node, das sich beispielsweise in Node.js um den Compilierungsprozess kümmert.

Auch beim Paketmanagement sorgt Deno für Überraschungen: Einer der Erfolgsfaktoren von Node ist der Paketmanager npm. npm gehört zwar grundsätzlich zur GitHub-Community und ist damit kein fester Bestandteil von Node, die Kombination gilt aber als inoffizieller Standard. Deno hingegen kommt ganz ohne externen Paketmanager aus bzw. ist im Grunde sein eigener Paketmanager. Das Modulsystem kann Pakete über Dateisystempfade oder URLs auflösen und die Ressourcen, die erforderlich sind, direkt herunterladen.

Wie funktioniert Deno?

Deno steht gerade erst am Anfang. Der Fokus liegt klar auf der Sicherheit und auf den grundlegenden Architekturfragen. Das fängt schon bei der Installation an, die nicht bequem über ein Installer-Paket läuft, sondern ausschließlich über GitHub bzw. Shell-Skripte oder den Paketmanager des Betriebssystems zu erledigen ist. Um zu prüfen, ob die Installation erfolgreich war, muss dann auch – ganz alte Schule – der Befehl deno - version in die Kommandozeile eingegeben werden. Dadurch erhalten Sie aber auch gleich einen Gesamtüberblick der installierten Deno-Version sowie der Versionen von V8 und TypeScript. Wer Deno nicht auf einem System installieren will, kann es auch in einem Docker Container einrichten und ausführen.

Sobald Deno installiert ist, gibt es zwei Arten der Ausführung. Die Laufzeitumgebung kann entweder interaktiv als Shell oder mit einer Datei als Eingabe verwendet werden. Ersteres ist sinnvoll für kleinere Anwendungen – und zum Experimentieren mit der Node.js-Alternative. Letzteres ist die gängige Anwendung von Deno. Dabei wird der Name einer Datei an die Plattform übergeben und die Arbeit mit Deno kann beginnen.

Die bekannten JavaScript-Keywords wie zum Beispiel import, export, promise usw. stehen in Deno direkt zur Verfügung und müssen nicht erst importiert werden. Neben den Standards bietet die Plattform ein globales Objekt, für das sich die Entwickler keinen eigenen Namen überlegt haben, weshalb es auch schlicht Deno heißt. Das Deno-Objekt bildet die Basis für jede Applikation. Es agiert als Schnittstelle zum System – so können Entwickler zum Beispiel auf das Dateisystem zugreifen und aus der Sandbox ausbrechen. Wie bereits oben erwähnt müssen diese Ausnahmen aktiv bestätigt werden, damit unbemerkte Angriffe von einer Applikation auf das System ausgeschlossen werden können.

Deno bietet alle Standardmodule; aus der Community kommen darüber hinaus aber bereits weitere, experimentelle bis nützliche Zusatzmodule, die den Funktionsumfang erweitern.

Deno: Vor-und Nachteile im Überblick

Ist bzw. wird Deno besser als Node? Der Entwickler Ryan Dahl ist davon überzeugt. Altlasten, Fehler und Kompromisse sollen ausgebügelt werden, um eine moderne, stabile und sichere Plattform für serverseitiges JavaScript und TypeScript zu schaffen. Das Potenzial ist in jedem Fall da, insbesondere dank dem Schritt, im Kern auf Mozillas Programmiersprache Rust zu setzen und ein zentrales Berechtigungssystem zu schaffen. Dieses lässt sich nicht nur intuitiv verwenden, sondern verhindert auch den unerwünschten Ausbruch einer Applikation aus der Sandbox.

Der stark vereinfachte Arbeitsablauf hat (noch) seine Nachteile: Deno ist mit bestehenden Ökosystemen nicht immer kompatibel. So läuft ein Node-Modul nicht einfach auch auf Deno – oder umgekehrt. Wenn sich die Plattform aber weiterhin bewährt, wird es langfristig wohl keine gravierenden Kompatibilitätsprobleme mehr geben. Für Deno gibt es beispielsweise schon jetzt eine mit Node kompatible require-Funktion.

Fazit

Deno befindet sich noch im Projektstatus. Die ersten Lösungen für einige der größten Schwächen von Node.js sind aber schon heute bemerkenswert.


Auf dem Laufenden bleiben?

Jetzt für unseren Newsletter anmelden und gratis Online-Marketing Whitepaper für lokale Anbieter sichern!