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.
- 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.
Sicherheitsbedachter Import von npm-Modulen
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.
API-Neuerungen in Deno 1.28
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)