Blog
Von Node zu Deno: eine Testfahrt mit dem neuen Kind in der Stadt

Wenn Sie Node und Typescript mögen, sollten Sie sich Deno ansehen, das neue Baby von Ryan Dahl, dem Schöpfer von Node.
Deno wurde geboren aus Ryans Bedauern über einige Designentscheidungen, die in Node getroffen wurden, insbesondere in Bezug auf Sicherheit, Modulverwaltung und APIs.
Deno adressiert dieses Bedauern mit einer brandneuen Typescript-Laufzeitumgebung, die auf Rust und V8 basiert und mehrere Ziele verfolgt:
Außerdem ist es eine einzige ausführbare Datei, die viele Entwicklungstools sofort zur Verfügung stellt, anstatt sich auf Lösungen von Drittanbietern verlassen zu müssen: Es hat einen eingebauten Linter, Formatter, Test Runner, Bundler, eine REPL-Konsole und mehr.
Wir hatten in nur wenigen Minuten ein voll funktionsfähiges Setup, indem wir ein Plugin für unsere bevorzugte IDE installierten. Es gibt Unterstützung für Visual Code, Atom, IntelliJ, Sublime, Vim und viele andere.
Angesichts der Ähnlichkeit mit Node und Typescript waren wir in der Lage, unglaublich schnell loszulegen.
Oder führen Sie ein lokal definiertes Programm aus:
Mit dem obigen Skript können wir bereits einige interessante Dinge sehen:
Hier sehen Sie, dass Deno nativen Support für Promises, Top-Level-Waits und sogar moderne Web-APIs wie Fetch bietet.
Tatsächlich funktionieren in Deno die meisten Web-APIs wie Websockets, Streams und Crypto nativ, und Sie können sogar WebAssembly-Code davon ausführen.
Server-only-APIs sind im Deno-Namensraum eingeschlossen. Wenn Sie sie also nicht verwenden, können Sie leicht mit Code enden, der im Browser ausgeführt werden kann!
Sie führen es mit deno test aus, und es bietet sogar Unterstützung für Abdeckungsberichte.
Für die anderen Module wird derzeit daran gearbeitet, eine Node-Kompatibilitätsschicht zu Deno hinzuzufügen.
- Standardmäßig sicher sein
- Standard-Web-APIs nutzen
- Vereinfachen Sie die Verwaltung von Abhängigkeiten
Leichte Landung
Das erste, was uns an Deno auffiel, war, wie einfach es ist, damit anzufangen. Es ist ein Kinderspiel, es mit einem Einzeiler von der Kommandozeile aus zu installieren:#Shell (Mac, Linux):
curl - fsSL https://deno.land/x/install/install.sh | sh
#PowerShell (Windows):
iwr https://deno.land/x/install/install.ps1 -useb | iex
#Homebrew (Mac):
brew install deno
Hauptmerkmale
Das Ausführen eines Programms erfolgt mit dem Befehl deno run (er unterstützt auch einen --watch Modus). Sie können ein Remote-Skript ausführen:deno run https://deno.land/std/examples/welcome.ts
import { serve } from "https://deno.land/std@0.117.0/http/server.ts";
console.log("https://localhost:8000/");
serve(() => new Response("Hello Worldn"), { addr: ":8000" });
- Es gibt keine package.json oder ähnliches mehr: Abhängigkeiten werden direkt in der Datei mit einer URL importiert. Sie können Module von Github, entfernten Servern oder CDNs abrufen. Deno kümmert sich darum, sie lokal zwischenzuspeichern und wiederzuverwenden. Es ist eine einfache und effektive Wahl, aber sie legt die Last, die Abhängigkeiten sauber und überschaubar zu halten, auf den Entwickler (wir empfehlen wirklich die Verwendung von Karten importieren)
- Wenn Sie das Skript ausführen, erhalten Sie eine Fehlermeldung, weil es versucht, auf das Netzwerk zuzugreifen. Im Gegensatz zu Node benötigt Deno aus Sicherheitsgründen eine explizite Berechtigung für den Zugriff auf Ressourcen wie das Dateisystem oder das Netzwerk. In diesem Beispiel benötigt es das Flag -allow-net, um zu funktionieren. Das Berechtigungsmodell ist einfach und dennoch flexibel und erlaubt es beispielsweise, den Zugriff auf das Dateisystem auf einen bestimmten Ordner im Nur-Lese-Modus zu beschränken oder den Netzwerkzugriff nur auf einen bestimmten Host oder Port zu beschränken.
Web-APIs
Lassen Sie uns ein anderes Beispiel betrachten:const jsonResponse = await fetch("https://api.github.com/users/denoland");
const jsonData = await jsonResponse.json();
console.log(jsonData);
Testen Sie
Auch das Testen ist ganz einfach:import { assertEquals } from "https://deno.land/std@0.117.0/testing/asserts.ts";
Deno.test("My test", () => {
const x = 5 - 1;
assertEquals(x, 4);
});
Andere Bits
Während unserer Sitzung haben wir verschiedene APIs und Funktionen ausprobiert, darunter Streams und die native Unterstützung für JSX, die das serverseitige React-Rendering sehr einfach macht. Wir haben auch einige Module von Drittanbietern ausprobiert, wie z.B. den Oak Server, der eine Art Deno-Entsprechung von Express ist. Insgesamt hatten wir eine sehr gute Zeit, alles hat wie erwartet funktioniert und wir konnten unsere Ziele mit minimalem Aufwand erreichen.Deno Deploy
Erwähnenswert ist auch, dass das Deno-Team einen (zum Zeitpunkt der Erstellung dieses Artikels) kostenlosen Service anbietet, mit dem Sie Ihre Projekte in vielen Regionen der Welt gleichzeitig hosten und betreiben können, wobei die Benutzer automatisch vom nächstgelegenen Standort aus bedient werden. Es heißt Deno Deploy, wir haben es selbst ausprobiert und fanden die Verwendung extrem einfach: Melden Sie sich einfach unter https://dash.deno.com/an, erstellen Sie ein Projekt und verweisen Sie auf eine gehostete TypeScript/JavaScript-Datei oder ein Github-Repo. Es sind keine Konfiguration oder zusätzliche Schritte erforderlich und es funktioniert einfach. Es ist etwas minimalistisch, es lässt sich noch nicht mit Gitlab, Bitbucket oder anderen Anbietern integrieren und es ist wahrscheinlich noch keine kluge Wahl für ernsthafte Projekte, aber es ist definitiv eine gute Grundlage für ein interessantes Angebot.Probleme im Paradies
Hat uns also alles gefallen, was wir gesehen haben? Nein, wir sind auf ein paar kleine Unstimmigkeiten gestoßen:- Die offizielle Dokumentation ist recht gut, aber die Deno-Ressourcen im übrigen Web sind im Vergleich zu populäreren Technologien wie Node sehr begrenzt
- Wir hatten einige Probleme mit der Tooling-Unterstützung, die nicht wie vorgesehen funktionierte (insbesondere bei der Erkennung von JSX-Typen in Visual Code)
- Einige Codebeispiele, die wir gefunden haben, funktionierten nicht, weil sich die APIs in der Zwischenzeit geändert haben.
import moment from "https://cdn.skypack.dev/moment?dts";
console.log(moment().format("MMMM Do YYYY, h:mm:ss a"));
Vergangenheit und Zukunft
Der letzte verbleibende Zweifel ist, ob Deno seinen Platz im überfüllten Raum der Technologie-Stacks finden kann. Obwohl sie letztes Jahr 1.0 erreicht hat und auf Github mehr als 79.000 Sterne zählt, muss sie sich erst noch als ausgereifte Technologie beweisen, die sich durchsetzen wird. Nur wenige Unternehmen haben sie bisher in der Produktion eingesetzt und es scheint nicht so, als würde sie in Bezug auf Google Trends, Stellenangebote oder andere Metriken viel Zugkraft bekommen. Sie ist definitiv nicht so bahnbrechend wie Node und viele bezweifeln immer noch, dass ihre Laufzeit und Standardbibliotheken stabil genug für die Übernahme durch den Mainstream sind. Aber es ist definitiv noch kein totes Pferd:- Im März 2021 wurde das Unternehmen Deno finanziert, indem es 4,9 Millionen Dollar an Kapital aufnahm, um seinen Stack weiter zu entwickeln.
- Der Deno Deploy Service wurde im Juni 2021 angekündigt.
- Slack hat im November dieses Jahres angekündigt, dass sie Deno für ihre Plattform der nächsten Generation verwenden werden.
- In der Zwischenzeit wurden das Projekt und seine Bibliothek ständig überarbeitet und verbessert.
Letzte Worte
Nach dem, was wir in unserer kurzen Zeit damit gesehen haben, hat sich Deno als eine produktive, pragmatische und entwicklerfreundliche Technologie mit einem sehr soliden Kerndesign erwiesen. Es bleibt abzuwarten, ob sie mit ihrer Mission Erfolg haben werden, aber wir hatten viel Spaß damit und werden auf jeden Fall genau beobachten, wie es sich weiterentwickelt.Verfasst von
Stefano D'Avella
Unsere Ideen
Weitere Blogs
Contact
Let’s discuss how we can support your journey.




