Deno 2.0 steht in den Startlöchern: Release Candidate erschienen

Der Release Candidate für Deno 2.0 soll alles enthalten, was das fertige Release bieten wird. Dazu zählen API-Updates und die neue process-Variable.

In Pocket speichern vorlesen Druckansicht
KI-Bild: Dinosaurier vor Bildschirm mit Code

(Bild: Erstellt mit KI durch iX)

Lesezeit: 4 Min.
Inhaltsverzeichnis

Das Entwicklungsteam hinter der JavaScript- und TypeScript-Runtime Deno hat den Release Candidate für Version 2.0 veröffentlicht. Das größte Update seit Version 1.0 wird der Node.js-Alternative wichtige neue Funktionen bringen, wie die Einführung der globalen Node.js-Variable process. Alle erwarteteten Features der finalen Version sind bereits im aktuellen Release Candidate enthalten.

Die globale Variable window war seit Deno 1.0 mit an Bord und sollte Deno möglichst Browser-kompatibel machen. Allerdings barg diese Variable einige Schwierigkeiten für User, sodass sich das Deno-Team entschieden hat, seit Version 1.40 auf den alternativen Gebrauch von globalThis oder self zurückzugreifen. window wird nun in Version 2.0 entfallen:

// Deno v1.x
window.addEventListener("load", () => {
  console.log("loaded");
});

// Deno v2.x
globalThis.addEventListener("load", () => {
  console.log("loaded");
});

Die Schwierigkeit der globalen Verfügbarkeit von window bestand darin, dass viele Libraries prüfen, ob sie im Browser ausgeführt werden, indem sie nach einer window-Variable statt einem DOM suchen – was zu einer Reihe von Bugs in Libraries führte, die ansonsten in Deno funktioniert hätten.

Als neue globale Variable steht im Release Candidate process bereit, was laut dem Entwicklungsteam häufig von Usern gewünscht wurde. Bisher war es zwar möglich, process durch den Import des node:process-Moduls zu verwenden, doch seien viele beliebte Frameworks auf die globale Verfügbarkeit der Variable angewiesen. Durch das Hinzufügen von process soll nun deutlich mehr Code, der ursprünglich für Node.js geschrieben wurde, ohne Änderungen auch in Deno laufen.

Das Deno-Team empfiehlt jedoch weiterhin, explizite Imports zu bevorzugen. Es hat daher eine neue Lint-Regel no-process-global hinzugefügt, die entsprechende Hints und Quick-Fixes im Editor anbieten wird.

Online-Konferenz zu React
enterJS React 19 Day, Online-Konferenz, 17. Oktober 2024

(Bild: Jackie Niam/Shutterstock.com)

Am 17. Oktober 2024 präsentiert die Online-Konferenz React 19 Day von dpunkt.verlag und iX die neuen Features der beliebten JavaScript-Bibliothek. Der Thementag im Rahmen der enterJS zeigt Teilnehmenden, wie sie das Optimum aus der neuen Version herausholen können und wie moderne Webentwicklung mit React 19 ihre Anwendungen besser macht. Auszug aus dem Programm:

Frühbuchertickets sind bis zum 25. September verfügbar.

Für das Verwalten von Dependencies bringt Deno 2.0 einige neue Funktionen mit. Unter anderem behandelt der deno add-Unterbefehl Spezifizierer nun mit einem Unterpfad, wie das Deno-Team im Vergleich mit der aktuellen Version 1.46 demonstriert:

# Zuvor in Deno v1.46
deno add jsr:@std/testing/snapshot
error: Failed to parse package required: @std/testing/snapshot

Caused by:
    0: Invalid package requirement '@std/testing/snapshot'. Invalid version requirement. Invalid specifier version requirement. Unexpected character '/'
    ...

# Deno v2.0
deno add jsr:@std/testing/snapshot
Add jsr:@std/testing@1.0.2

# Deno v1.46
deno add npm:preact/hooks
error: Failed to parse package required: npm:preact/hooks

Caused by:
    0: Invalid package requirement 'preact/hooks'. Packages in the format <scope>/<name> must start with an '@' symbol.
    1: Packages in the format <scope>/<name> must start with an '@' symbol.

# Deno v2.0
deno add npm:preact/hooks
Add npm:preact@10.24.0

Beim Hinzufügen von Dependencies sind nun jsr:- oder npm:-Präfixe notwendig, um eine mögliche Mehrdeutigkeit zwischen Paketen mit den gleichen Namen in beiden Registries zu verhindern.

Drei APIs gelten nun als stabil und benötigen demnach nicht länger ein --unstable-Flag: WebGPU, Deno.dlopen() und Deno.createHttpClient(). Daneben hat das Entwicklungsteam auch die Fehlermeldungen überarbeitet, um hilfreiche Hinweise zu liefern, wenn man versucht, eine instabile API ohne entsprechendes Flag zu verwenden.

Als abwärtsinkompatible Änderung zählt das Entfernen einer Vielzahl von APIs. Dazu zählen Deno.Buffer, Deno.close() und Deno.copy(). Als "soft-deprecated" gelten fünf APIs, die weiterhin funktionieren, aber weder Updates noch Bugfixes erhalten werden. Daher empfiehlt das Deno-Team eine Migration zu ihren stabilen Entsprechungen:

  • Deno.serveHttp() – stattdessen Deno.serve() nutzen
  • Deno.run() – stattdessen das neue Deno.Command() nutzen
  • Deno.isatty(Deno.stdin.rid) – stattdessen Deno.stdin.isTerminal() nutzen
  • Deno.isatty(Deno.stdout.rid) – stattdessen Deno.stdout.isTerminal() nutzen
  • Deno.isatty(Deno.stderr.rid) – stattdessen Deno.stderr.isTerminal() nutzen

Der Release Candidate soll dabei helfen, mögliche Schwierigkeiten aufzudecken, bevor das Major Release Deno 2.0 erscheint. Daher sucht das Deno-Team aktiv nach Feedback von Entwicklerinnen und Entwicklern, entweder per Erstellen eines Issue auf GitHub oder per Kontaktaufnahme im Discord-Channel #deno-2-help.

Alle weiteren Details zum Release Candidate bietet der Deno-Blog.

(mai)