JavaScript-Runtime: Deno 1.28 erlaubt Import von 1,3 Millionen npm-Modulen

Das Deno-Team arbeitet weiter an der Kompatibilität mit npm und hat einen neuen Erfolg vorzuweisen. Daneben bringt das Release neue und stabilisierte APIs.

In Pocket speichern vorlesen Druckansicht 6 Kommentare lesen

(Bild: Shutterstock.com/Kenishirotie)

Lesezeit: 3 Min.
Von
  • Maika Möbus

Deno ist in Version 1.28 erschienen. Die aus der Feder von Node.js-Erfinder Ryan Dahl stammende Runtime für JavaScript und TypeScript führt darin die vor einigen Monaten begonnene Arbeit fort, besser mit dem Node.js-Paketmanager npm interoperabel zu sein. Daneben stabilisiert sie bestehende APIs, führt eine neue API ein und aktualisiert die enthaltene JavaScript-Engine V8 auf Version 10.9.

Das neue Deno-Release stabilisiert die npm-Kompatibilität und ermöglicht es, 1,3 Millionen npm-Module in Deno zu importieren. Dazu zählen beispielsweise Persistente-Daten-Module wie Prisma, Mongoose und MySQL oder Frontend-Frameworks wie React und Vue. Das Verwenden von npm-Paketen erfordert einen npm: Specifier, etwa in einem Import-Statement:

import { chalk } from "npm:chalk@5";

Dabei soll das Verwenden von npm mit Deno sicherer als via Node.js sein, da es einen "secure-by-default"-Ansatz verwendet. Anstatt nicht vertrauenswürdigem Code von Drittanbietern Zugriff auf das gesamte System zu erlauben, kann Deno über Zugriffsversuche informieren und sie einschränken:

Eine geplante erhöhte Kompatibilität mit npm kündigte das Deno-Team bereits im August 2022 an. Es gab an, damit einem häufigen Community-Wunsch entsprechen zu wollen: Deno sollte auf einfachere Weise mit für Node.js geschriebenem und als npm Package verfügbarem JavaScript-Code umgehen können.

Zu den Vorteilen des Verwendens von npm mit Deno soll zählen, dass der npm install-Schritt entfällt, dass es keine package.json-Datei gibt, was zu weniger Boilerplate-Code führt, und dass standardmäßig kein node_modules-Ordner erstellt wird. Module werden einmal in einem speziellen globalen Verzeichnis gecacht. Zur Abwärtskompatibilität lässt sich --node-modules-dir einsetzen.

Für die Zukunft plant das Deno-Team, das Verwenden möglichst vieler npm-Module in Deno zu ermöglichen. Derzeitige Hinderungsgründe bestehen etwa darin, dass einige Module einen Ordner mit einem typischen Node.js-Setup voraussetzen, inklusive einer package.json. Daneben lassen sich einige Deno-Unterbefehle wie deno compile noch nicht mit npm-Modulen nutzen.

Die neue, derzeit noch instabile API Deno.Command steht bereit, um die instabilen APIs Deno.spawn, Deno.spawnSync und Deno.spawnChild abzulösen. Der Blogeintrag zur Ankündigung demonstriert deren Async-Verwendung

let c = new Deno.Command("echo", { args: ["foo"] });
let { stdout, stderr } = await c.output();

und deren Sync-Verwendung:

let c = new Deno.Command("echo", { args: ["foo"] });
let { stdout, stderr } = c.outputSync();

Als stabil gelten nun die fünf APIs Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() und Deno.uid(). Damit benötigen sie kein --unstable-Flag mehr.

Alle Details zu Deno 1.28 stellt das Entwicklungsteam in einem Blogeintrag und in den Release Notes auf GitHub bereit.

(mai)