Obwohl Node.js nach wie vor mit großem Abstand die meistgenutzte serverseitige JavaScript-Laufzeitumgebung ist, haben alternative Laufzeiten wie Deno und Bun Aufmerksamkeit erregt, da sie versuchen, das Node.js-Konzept zu verbessern.

Deno, die populärere der beiden neueren Runtimes, behebt einige Sicherheitsprobleme von Node.js und bietet eine umfassendere Unterstützung für Technologien wie TypeScript und WebAssembly.

In diesem Artikel lernst du die Grundlagen von Deno kennen, erfährst, wie es im Vergleich zu Node.js und Bun funktioniert, und begleitest eine praktische Demonstration, bei der Deno zum Aufbau eines einfachen HTTP-Webservers verwendet wird.

Was ist Deno?

Als sich Entwickler mit JavaScript vertraut machten, erkannten sie dessen Potenzial für die Programmierung auf lokalen Rechnern. Also schufen sie serverseitige Laufzeiten – Umgebungen, die es ermöglichen, JavaScript-Code auf Rechnern auszuführen, ohne einen Browser zu benutzen.

Ryan Dahl entwickelte zu diesem Zweck Node.js und schuf später Deno, um einige der Probleme zu beheben, die er mit dem ursprünglichen Node.js-Design hatte. Dazu gehören die Abhängigkeit von einem zentralisierten Paketmanager wie npm, das Fehlen einer Standardbibliothek und die laxen Sicherheitseinstellungen.

Zu den wichtigsten Vorteilen von Deno gehören die folgenden:

  • Standardmäßige Sicherheit – Der Benutzer muss explizit die Erlaubnis erteilen, damit der Code auf das Netzwerk, das Dateisystem oder die Umgebung zugreifen kann.
  • Integrierte Unterstützung für TypeScript und WebAssembly – Die Ausführung von TypeScript- und WebAssembly-Programmen in Deno ist so einfach wie die Ausführung von JavaScript-Programmen. Die Laufzeitumgebung kompiliert die Sprachen genauso wie JavaScript.
  • Ein dezentraler Paketmanager – Anstatt sich auf ein Paket-Repository wie npm oder den Paketmanager von Bun zu verlassen, kann Deno Code direkt von URLs importieren. Das bedeutet, dass du Abhängigkeiten von jedem Ort laden kannst, an dem sie gehostet werden, z. B. von deinem GitHub-Repository, Server oder CDN. Deno bietet auch einen Skript-Hosting-Service für einen noch einfacheren Zugang.
  • Einhaltung von Webstandards – Deno ist bestrebt, die gleichen APIs wie die Browser zu verwenden, was bedeutet, dass Code, der für Browser geschrieben wurde, leicht in die Laufzeitumgebung übersetzt werden kann.

Große Unternehmen und Branchengrößen wie Slack, Netlify und Supabase haben Deno bereits eingeführt, aber unter Webentwicklern ist die Akzeptanz noch nicht so groß. Laut der Stack Overflow-Umfrage aus dem Jahr 2022 nutzen nur 1,47 % der professionellen Entwickler/innen, die an der Umfrage teilnahmen, Deno, während 46,31 % angaben, Node.js zu verwenden.

Was macht Deno?

Wie jede JavaScript-Laufzeitumgebung ermöglicht Deno Entwicklern, JavaScript auf der Serverseite auszuführen. Daher kannst du mit Deno eine Vielzahl von Programmieraufgaben erledigen.

Deno eignet sich besonders gut für die Entwicklung von Serveranwendungen, die auf webbasierte Benutzeranfragen reagieren. Wenn du z. B. einen Online-Buchladen einrichtest, könntest du mit Deno eine Anwendung erstellen, die Informationen aus einer PostgreSQL-Datenbank abruft, die vom Benutzer gewünschte Seite erstellt und sie zum Rendern an den Browser sendet.

Du kannst Deno auch für einfachere Programmieraufgaben verwenden, z. B. um ein Kommandozeilentool zu erstellen, mit dem du deine Aufgaben über das Terminal verwalten kannst. Mit anderen Worten: Mit Deno kannst du die gleichen Ziele erreichen wie mit Sprachen wie Python oder Ruby.

Deno vs. Node

Deno soll eine Verbesserung gegenüber Node.js sein und erfüllt dieses Versprechen in mehreren Schlüsselbereichen. Deno verbessert die Sicherheit, indem es feiner abgestufte Zugriffskonfigurationen für verschiedene Code-Module ermöglicht. Außerdem konzentriert sich Deno auf die Einhaltung von Webstandard-APIs, so dass Entwickler/innen denselben Code sowohl auf der Browser- als auch auf der Serverseite verwenden können.

Für Teams, die an serverseitigen JavaScript-Projekten arbeiten, ist Deno zu einer echten Alternative zu Node geworden. Auch wenn die ähnlichen Funktionen einige Entwickler/innen davon überzeugt haben, dass Deno Node.js ersetzen könnte, ist diese Option aus einigen wichtigen Gründen unwahrscheinlich.

Node.js ist die beliebteste JavaScript-Laufzeitumgebung und verfügt über ein umfangreiches Ökosystem an vorbereiteten Paketen und eine große, aktive Nutzergemeinschaft. Diese unschätzbaren Ressourcen tragen dazu bei, dass Node.js eine äußerst attraktive Laufzeitumgebung bleibt.

Im Gegensatz dazu ist Deno neu: Version 1.0 wurde erst im Mai 2020 veröffentlicht, sodass nur relativ wenige Entwickler/innen Zeit hatten, damit herum zu spielen. Das Erlernen eines neuen Tools verlängert die Entwicklungszeit. Außerdem ist nicht klar, ob Deno für viele einfache Projekte signifikante Vorteile bringen würde.

Aber wenn du eine Anwendung in einem Bereich entwickelst, in dem Sicherheit wichtig ist, wie z. B. im Finanzwesen, könnten die Sicherheitsfunktionen von Deno einen Wechsel erstrebenswert machen.

Deno vs. Bun

Der ehemalige Stripe-Ingenieur Jarred Sumner hat Bun im Juli 2022 zum ersten Mal für Beta-Tests freigegeben. Bun ist eine experimentellere Laufzeitumgebung als Deno und im Gegensatz zu Deno auf weitgehende Abwärtskompatibilität mit Node.js ausgelegt.

Bun ist außerdem unglaublich schnell und übertrifft Node.js und Deno. Die wichtigsten Funktionen ermöglichen diese Fähigkeiten:

  • Eine bessere Engine – Anstelle von Googles V8 JavaScript- und Web Assembly-Engine verwendet Bun die schnellere und effizientere JavaScriptCore als zugrunde liegende JavaScript-Engine.
  • Mehr Kontrolle über den Code – Bun ist in Zig geschrieben, einer Low-Level-Sprache, die mehr Kontrolle über die Codeausführung bietet als JavaScript.
  • Fein abgestimmte Effizienz – Das Team, das an Bun arbeitet, hat bei der Entwicklung auf Profiling, Benchmarking und Optimierung gesetzt, um die Effizienz des Codes zu gewährleisten.

Bun ist so neu, dass es relativ wenig Unterstützung aus der Community gibt, um bei der Fehlersuche zu helfen. Trotzdem kann Bun viel Spaß beim Experimentieren machen. Teams, die speziell eine Leistungssteigerung benötigen, könnten Bun für ihre Projekte nützlich finden, aber bei der Webentwicklung stehen häufig andere Faktoren als die Leistung im Vordergrund.

Erste Schritte mit Deno

Nachdem du nun ein wenig über Deno erfahren hast und wie es im Vergleich zu anderen beliebten JavaScript-Laufzeiten abschneidet, ist es an der Zeit zu sehen, wie es funktioniert. In diesem Abschnitt lernst du, wie du einen einfachen Server in Deno erstellst, der auf HTTP-Anfragen mit „Hallo vom Server!“ antwortet.

Installieren von Deno

Du kannst Deno auf einem Computer als ausführbare Binärdatei installieren, indem du diese Installationsanweisungen aus der offiziellen Dokumentation verwendest. Unter macOS kannst du Deno zum Beispiel mit dem Befehl brew install deno installieren.

Eine andere Möglichkeit, mit Deno zu arbeiten, ist, es als npm-Paket zu installieren, etwa so:

Erstelle einen Ordner für dein Projekt (vielleicht deno_example) und führe darin den Befehl npm init aus. (Du kannst alle von init vorgeschlagenen Standardoptionen akzeptieren, da es eine einfache package.json-Datei erstellt)

Nachdem du deine Anwendung initialisiert hast, führe npm install deno-bin aus, um das Deno-Binärpaket zu installieren. Jetzt kannst du die package.json Datei aktualisieren, um den Start der Anwendung mit npm start zu ermöglichen. Füge die folgende Zeile, die mit "start": beginnt, zu den Objekteigenschaften "scripts" in der standardmäßigen package.json-Datei hinzu:

"scripts": {
    "start": "deno run --allow-net app.ts",
    "test": "echo "Error: no test specified" && exit 1"
  },

Diese Skriptergänzung ermöglicht es Deno, das Modul app.ts mit Netzwerkprivilegien auszuführen (--allow-net). Denke daran, dass du bei der Arbeit mit Deno den Zugriff auf ein Netzwerk oder Dateisystem explizit erlauben musst.

Jetzt kannst du das Modul app.ts erstellen, das an einem Port lauscht und Benutzeranfragen bedient.

Erstellen des app.ts-Moduls

Die Erstellung eines einfachen Servers in Deno ist extrem einfach. Erstelle zunächst eine app.ts-Datei und füge den folgenden Code ein:

import { serve } from "https://deno.land/[email protected]/http/server.ts";
serve((_req) => new Response("Hello from the server!"), { port: 8000 });

Der Code verwendet die Funktion serve, die auf der server.ts Deno library die auf der offiziellen Deno.land-Website gespeichert ist. Dieser Code enthält auch einen serve Funktionshandler für eingehende Anfragen. Die Handler-Funktion antwortet auf jede Anfrage mit „Hallo vom Server!“

Die Funktion serve nimmt auch optionale Parameter entgegen, wie z. B. die Portnummer, über die du den Server bedienen willst. Im Beispielcode werden diese Parameter verwendet, um den Port 8000 zu bedienen.

Als Nächstes startest du den Server, indem du npm start aufrufst. Dies sollte einen Server starten, der auf localhost:8000 lauscht und auf Anfragen mit einer Begrüßung antwortet.

Deno-Server in Aktion
Deno-Server in Aktion

Wenn du den Server zu einer vollwertigen API ausbauen willst, musst du wahrscheinlich eine Datenbankanbindung hinzufügen. Das ist leicht zu bewerkstelligen, denn die Deno-Community hat Treiber entwickelt, die beliebte Datenbanken wie MariaDB/MySQL, PostgreSQL, MongoDB und andere unterstützen.

Zusammenfassung

Die Bandbreite der Runtimes reicht von gängigen und zuverlässigen bis hin zu sehr experimentellen. Die Wahl der richtigen Laufzeitumgebung für dein Projekt hängt von deinem Projekt ab und davon, wie du deine Ziele erreichen willst.

Node.js eignet sich gut für die meisten Projekte. Es hat ein großes Ökosystem und eine große Community, die bei einer Vielzahl von Problemen helfen kann.

Deno hat den Vorteil, dass es mehr Sicherheit und ein besseres Entwicklererlebnis bietet. Gleichzeitig ist es am besten für erfahrene Teams geeignet, so dass die Vorteile den Zeit- und Arbeitsaufwand für das Erlernen einer unbekannten Laufzeit überwiegen.

Auch wenn Bun für die meisten professionellen Projekte zu experimentell ist, ist es eine einzigartige und unterhaltsame Laufzeitumgebung, die man für ein persönliches Projekt oder zur Erweiterung nutzen kann.

Alles in allem bietet Deno ein Gleichgewicht zwischen den Vorteilen von Node.js und den experimentellen Möglichkeiten von Bun. Während Node.js für die meisten Projekte eine brauchbare Wahl ist, könnte Deno an der Spitze der zukünftigen Entwicklung der Webentwicklung stehen.

In der Zwischenzeit kannst du dich mit Deno vertraut machen, indem du dich für Kinstas Anwendungs-Hosting Hobby Tier anmeldest – jetzt programmieren und später skalieren.

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).