Anzeige
Anzeige
Ratgeber

Deno wird 1: Das steckt hinter der Node.js-Alternative mit dem Dino im Logo

Ryan Dahl wollte mit Deno zehn Dinge besser machen, die ihm an Node.js nicht gefallen. Am Mittwoch hat die alternative Runtime für JavaScript und TypeScript Version 1.0 erreicht. Wir haben uns die Node-Alternative genauer angeschaut.

3 Min.
Artikel merken
Anzeige
Anzeige

Das Logo von Deno ist ein Dino. (Bild: deno/github.com/hashrock)

Deno ist – wie Node.js – eine Laufzeitumgebung für JavaScript. Genau wie Node.js bietet Deno einen Weg, serverseitiges JavaScript – oder TypeScript – zu schreiben. Es ähnelt Node.js in seinem Funktionsumfang in vielerlei Hinsicht, nutzt genau wie Node die V8-JavaScript-Engine unter der Haube und wurde sogar von derselben Person ins Leben gerufen, die auch hinter Node steckt. Anders als Node wurde Deno jedoch nicht in C++ und JS, sondern in Rust und TypeScript implementiert. Das bedeutet für euch: Ihr könnt direkt in Deno statisch typisierten Code schreiben, ohne jemals eine TS-config.json-Datei auch nur anfassen zu müssen – ihr könnt auf alle Features innerhalb der Runtime vom Deno-Namespace aus zugreifen.

Eingebaute Security

Deno kommt standardmäßig mit einigen Security-Vorkehrungen.

Anzeige
Anzeige

Angenommen, ihr wollt über console.log( Deno.cwd() ) das aktuelle Working-Directory ausloggen. Solche Skripte könnt ihr via deno run über die Kommandozeile ausführen – allerdings nicht, ohne vorher die Erlaubnis zur Ausführung solcher Aktionen innerhalb der Runtime zu erteilen. In diesem konkreten Fall erreichen wir das über die –-allow-read-flag:

deno run --allow-read main.ts

Anzeige
Anzeige

Dahinter steckt eine Sache namens Sandbox, die Programme davon abhält, Dinge zu tun, die ihr nicht erlauben wollt. Das ist nützlich, wenn ihr ein JS-Programm außerhalb des Browsers ausführen wollt, aber nicht wollt, dass es auf innerhalb eures Systems einfach so auf alles Mögliche zugreift.

Anzeige
Anzeige

In Node.js gibt es nichts, was eine Node.js-App davon abhält, zum Beispiel eure SSH-Keys abzugreifen und sie an einen Server weiterzuleiten. Dagegen kann sich schützen, wer darauf achtet, nur Pakete von vertrauenswürdigen Urhebern zu installieren. Ein bisschen Sicherheitsrisiko ist da aber immer noch, auch diese Pakete können gehackt werden.

Mittels der Sandbox repliziert Deno das Permission-Modell des Browsers – auch im Browser ausgeführtes JS benötigt eure explizite Erlaubnis für die Ausführung jeglicher Aktion auf eurem System. Weitere Flags, über die ihr Deno Erlaubnisse erteilen könnt, sind zum Beispiel --allow-write oder --allow-net.

Anzeige
Anzeige

Tschüss Callback-Hölle: Promise-Handling mit top-level-await

Eine Sache, die TypeScript-Nutzer begeistern dürfte, ist, dass Deno – wie TypeScript seit V 3.8 – top-level-await implementiert.

In Deno könnt ihr über die fetch-API einen Network-Request ausführen – als würdet ihr euch im Browser befinden:

const res = await fetch( ‘https://t3n.de’ );

Und weil Deno top-level-await unterstützt, braucht ihr dafür nicht einmal eine async-Funktion.

Anzeige
Anzeige

Browser-kompatible Events

Deno will euren Code so browserkompatibel machen wie möglich. Die Runtime beinhaltet ein window-Objekt mit Lifecycle-Events,

window.onload = event => console.log( ‘t3n says hi 🦕’ )

auf die ihr Event-Listener ansetzen könnt. Das ermöglicht es, Code zu schreiben, der sowohl browser- als auch serverseitig ausgeführt werden kann.

Deno ist WebAssembly-kompatibel

Deno kann außerdem auch WebAssembly-Binaries ausführen.

Anzeige
Anzeige
const wasmBinary = new Uint8Array([ 0, 23, 77]);

const wasmModule = new WebAssembly.Module(wasmBinary);

npm-Pakete 🙅‍♀️

Eine Sache, die in Deno allerdings nicht funktioniert, sind npm-Pakete. Deno ist Runtime- und Package-Manager in einem und damit nicht mit dem separaten Paketmanager kompatibel. In Deno könnt ihr Pakete stattdessen mittels ES-Module-Syntax via deren URL importieren, zum Beispiel so:

import { serve } from ‘ https://deno.land/std/http/server.ts’ ;

Remote-Modules werden via URL referenziert. Wenn ihr ein Skript das erste Mal ausführt, wird dessen Code lokal gespeichert und gecached. Es gibt keine package.json. Code kann über jede URL referenziert werden, ähnlich, wie das auch im Browser funktioniert.

Standard-Library

Deno verfügt über eine Auswahl an Standard-Modulen für häufige Use-Cases. Zum Beispiel könnt ihr wie oben im Beispiel über das http-Modul serve importieren und es nutzen, um einen Server zu erstellen, der wie eine async-Iterable gehandhabt wird:

Anzeige
Anzeige
// main.ts

import { serve } from ‘https://deno.land/std/http/server.ts’;

const s = serve({ port: 8000 });
for await (const req of s)
req.respond( {body: ‘Deno 🦕 is cool’} );

Ausführen könnt ihr das Ganze dann über deno run --allow-net main.ts 

Fazit

Deno wurde am Mittwoch in V 1.0 released. Kurzfristig wird die Runtime Node.js sicher nicht ersetzen. Node schafft ein geschlossenes Ökosystem, das mittlerweile relativ stabil ist. Ob die JavaScript-Entwickler-Community sich auf längere Sicht zugunsten des Dinos von Node.js abwenden wird, bleibt abzuwarten. Wer sich die Runtime genauer anschauen will, findet auf der Website zum Projekt neben einem Blogpost zu V 1.0 auch ein ausführliches Manual, die Standard-Library und alle bislang unterstützten Third-Party-Module.

Zum Weiterlesen: Web-Development jetzt und später: 3 ½ Vorhersagen, die du lesen solltest

Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige