Was ist Deno?
Deno (ein Anagramm von „Node“ 🤯), ist eine JavaScript und TypeScript Runtime, die
seit Mai 2020 in der Version 1.0 verügbar ist. Deno wurde von Ryan Dahl, dem ursprünglichen Entwickler von Node.js, entwickelt und soll einige konzeptionelle
Einschränkungen und Mängel von Node.js beheben.
Deno ist Open-Source (MIT) in Rust programmiert, basiert auf der V8 JavaScript Engine und inkludiert einen
TypeScript Compiler. Dieser erlaubt es neben JavaScript auch direkt TypeScript Programme über die Kommandozeile auszuführen.
Was ist das besondere an Deno?
Deno soll einige bekannte Mängel von Node.js beheben. Dazu zählen unter anderem:
Ein schlecht konzipiertes Modulsystem mit einem stark zentralisiertem
Verteilungsmechanismus.
- Deno setzt hier folgendermaßen an:
- Deno verwendet ECMAScript Module (anstelle der bei Node.js üblichen
CommonJS Module) - Deno Module können überall gehostet werden – ein zentrales Repository (wie
bei Node.js das npm Registry) gibt es nicht. Module können direkt über
ihre URL importiert werden und werden immer lokal gecached und kompiliert.
Außerdem werden Module nicht auf neuere Versionen aktualisiert, außer wenn
man das ausdrücklich angibt.
Viele veraltete Legacy-APIs, die aber weiterhin unterstützt werden
müssen.
- Das macht Deno anders:
- Module via
require()
zu importieren wird nicht unterstützt,
außschließlich der ECMAScript Modulimport
Syntax wird
unterstützt - Deno verwendet moderne ECMAScript-Funktionen in allem internen APIs und
Standardbibliotheken. Alle asynchronen Funktionen nutzen Promises – eine
auf Callbacks basierende API wie bei Node.js gibt es nicht.
Fehlende Berücksichtigung von Security-Aspekten.
- Deno verhält sich hier anders, denn:
- Standardmäßig dürfen Programme, die mit Deno ausgeführt werden, nicht auf
die Festplatte, das Netzwerk, auf Unterprozesse oder auf
Umgebungsvariablen zugreifen. Dies muss explizit über
Kommandozeilenargumente erlaubt werden (z.B.:--allow-read
,
--allow-net=api.codecentric.com
, etc.) - Bei unbehandelten Fehlern stürzt die Deno Runtime (im Gegensatz zu
Node.js) immer direkt ab. Dadurch werden nicht vorhersehbare Ereignisse
verhindert, die auftreten können, wenn ein Programm nach einem
unbehandelten Fehlern weiterläuft.
Zudem soll Deno out-of-the-box eine sehr gute Developer-Experience bieten, u.A.
durch:
- TypeScript Support
- Eingebautes Tooling:
- Unit Testing (
deno test
) - Code Formatting (
deno fmt
) - Linting (
deno lint
) - Dependency Checking (
deno info
)
- Unit Testing (
- Eingebauter live-reload File-Watcher (seit Deno 1.4):
deno run --watch
, muss aktuell zusätzlich noch mit der
--unstable
Flag ausgeführt werden, da das File-Watcher-Feature
noch nicht stabil ist - Eingebautes Bundling (via
deno bundle
) um alle verwendeten
Module und den eigenen Code in eine einzige JavaScript Datei zu bündeln
Projekt-Setup & Hello World
Doch genug der Theorie, wie startet man am besten mit der Deno Entwicklung?
- Deno installieren: Die Anleitungen dazu findet ihr auf der offiziellen
Homepage von Deno - Gehostetes „Hello-World“ Modul ausführen
- Das „Hello-World“ Modul ist hier gehostet:
https://deno.land/std@0.69.0/examples/welcome.ts - Programm über die Kommandozeile ausführen:
Tipp: clickt auf den Modul-Link, alle bei Deno-Land gehostete Module
können auch direkt im Browser inspiziert werden!deno run https://deno.land/std@0.69.0/examples/welcome.ts
- Das „Hello-World“ Modul ist hier gehostet:
- Ergebnis:
- Eigenes "Hello-World" Modul ausführen
- Legt eine
hello.ts
Datei an - Befüllt sie mit eurem Hello World Code, z.B.
- Führt sie mit
deno run hello.ts
aus - Ergebnis:
Download https://deno.land/std@0.69.0/examples/welcome.ts
Check https://deno.land/std@0.69.0/examples/welcome.ts
Welcome to Deno 🦕
console.log("Hello codecentric 👋");
Check file:///path/to/file/hello.ts
Hello codecentric 👋
Eine einfache REST API mit Deno & Oak
Um etwas über das Hello-World Beispiel hinaus einen Einblick in den aktuellen Entwicklungsstand von Deno zu bekommen, wollen wir in diesem Abschnitt eine sehr einfache REST API bauen. Hierzu nutzen wir das Framework oak . Oak ist ein Middleware-Framework für das in Deno inkludiertehttp
Modul. Leser\*innen, die bereits mit Node.js und Express oder Koa gearbeitet haben, dürften sich im folgenden Code wie Zuhause fühlen 😉. - Zuerst installieren wir oak als dependency via
npm install ..
- Ach nein, halt! Da war ja was...
- In Deno werden alle dependencies einfach in der TypeScript Datei, in der sie verwendet werden, direkt über eine URL importiert!
- Wir legen uns also eine Datei
app.ts
an, und in diese kommt der folgende Code:
Weitere Beiträge
von Felix Magnus
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Felix Magnus
IT Consultant
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.