Die Deno-JavaScript-Plattform ist mit NPM-Modulen kompatibel

Deno 1.28 wurde veröffentlicht, ein Framework zum Sandboxing von JavaScript- und TypeScript-Anwendungen, mit dem serverseitige Handler erstellt werden können. Die Plattform wird von Ryan Dahl, dem Erfinder von Node.js, entwickelt. Deno nutzt wie Node.js die V8-JavaScript-Engine, die auch in Chromium-basierten Browsern zum Einsatz kommt. Gleichzeitig ist Deno kein Fork von Node.js, sondern ein neues Projekt, das von Grund auf neu erstellt wurde. Der Projektcode wird unter der MIT-Lizenz vertrieben. Builds sind für Linux, Windows und macOS vorbereitet.

Das Deno-Projekt wurde ins Leben gerufen, um Benutzern eine sicherere Umgebung zu bieten und konzeptionelle Fehler in der Node.js-Architektur zu beseitigen. Um die Sicherheit zu verbessern, ist die V8-Engine in Rust geschrieben, wodurch viele der Schwachstellen vermieden werden, die durch Speichermanipulation auf niedriger Ebene entstehen. Um Anfragen in einem nicht blockierenden Modus zu verarbeiten, wird die ebenfalls in Rust geschriebene Tokio-Plattform verwendet. Mit Tokio können Sie leistungsstarke Anwendungen erstellen, die auf einer ereignisgesteuerten Architektur basieren, Multithreading unterstützen und Netzwerkanforderungen im asynchronen Modus verarbeiten.

Eine wichtige Änderung in der neuen Version ist die Stabilisierung der Kompatibilität mit im NPM-Repository gehosteten Paketen, die es Deno ermöglicht, mehr als 1.3 Millionen Module zu verwenden, die für die Node.js-Plattform erstellt wurden. Beispielsweise können Deno-basierte Anwendungen jetzt persistente Datenzugriffsmodule wie Prisma, Mongoose und MySQL sowie Front-End-Frameworks wie React und Vue verwenden. Einige NPM-Module sind immer noch nicht mit Deno kompatibel, beispielsweise aufgrund von Bindungen an Node.js-spezifische Umgebungselemente wie die Datei package.json. Auch die Verwendung des Befehls „deno compile“ mit NPM-Modulen ist noch nicht möglich. Zukünftige Versionen sollen diese Inkompatibilitäten und Einschränkungen beheben.

Die Unterstützung für das zuvor von Deno verwendete ECMAScript-Modulsystem und das Web-API-Modell bleibt auf demselben Niveau erhalten, und für den Import von NPM-Modulen wird das bekannte URL-basierte Ladeschema von Deno verwendet. Für den Zugriff auf NPM-Module gibt es ein spezielles URL-Präfix „npm:“, das auf die gleiche Weise wie reguläre Deno-Module verwendet werden kann. Um beispielsweise ein NPM-Modul zu importieren, können Sie „import { chalk } from „npm:chalk@5“;“ angeben und zum Ausführen eines NPM-Skripts über die Befehlszeile „deno run --allow-env --allow“. -read npm:create-vite-extra.“

Die Verwendung von NPM-Paketen in Deno ist viel einfacher als in Node.js, da keine Module vorinstalliert werden müssen (Module werden beim ersten Start der Anwendung installiert), es keine package.json-Datei und keine standardmäßigen node_modules gibt Verzeichnis (Module werden im freigegebenen Verzeichnis zwischengespeichert, es ist jedoch möglich, das alte Verhalten mit der Option „--node-modules-dir“ wiederherzustellen).

NPM-basierte Anwendungen behalten die Möglichkeit, die Zugriffskontrolle, Isolierung und sicherheitsrelevanten erweiterten Funktionen von Deno zu nutzen. Um Angriffen durch fragwürdige Abhängigkeiten entgegenzuwirken, blockiert Deno standardmäßig alle Versuche, über Abhängigkeiten auf das System zuzugreifen, und zeigt eine Warnung über erkannte Probleme an. Wenn ein Modul beispielsweise versucht, Schreibzugriff auf /usr/bin/ zu erhalten, wird eine Bestätigungsanfrage für diesen Vorgang angezeigt: deno run npm:install-malware ⚠️ ┌ Deno fordert Schreibzugriff auf /usr/bin/ an. ├ Von „install-malware“ angefordert ├ Nochmals mit --allow-write ausführen, um diese Eingabeaufforderung zu umgehen. └ Erlauben? [y/n] (y = ja, erlauben; n = nein, verweigern) >

Zu den Nicht-NPM-Verbesserungen in der neuen Version gehören die Aktualisierung der V8-Engine auf Version 10.9, die automatische Erkennung von Dateien mit Sperren und die Stabilisierung von Deno.bench(), Deno.gid(), Deno.networkInterfaces() und Deno.systemMemoryInfo(). und Deno-APIs. .uid(), wodurch die neue instabile API Deno.Command() zum Ausführen von Befehlen hinzugefügt wird (universeller Ersatz für Deno.spawn, Deno.spawnSync und Deno.spawnChild).

Hauptmerkmale von Deno:

  • Sicherheitsorientierte Standardkonfiguration. Dateizugriff, Netzwerk und Zugriff auf Umgebungsvariablen sind standardmäßig deaktiviert und müssen explizit aktiviert werden. Anwendungen werden standardmäßig in isolierten Sandbox-Umgebungen ausgeführt und können nicht auf Systemfunktionen zugreifen, ohne explizite Berechtigungen zu erteilen.
  • Integrierte Unterstützung für TypeScript über JavaScript hinaus. Für die Typprüfung und JavaScript-Generierung wird der Standard-TypeScript-Compiler verwendet, was zu einem Leistungsabfall im Vergleich zum JavaScript-Parsing in V8 führt;
  • Die Laufzeit liegt in Form einer einzelnen, eigenständigen ausführbaren Datei („deno“) vor. Um Anwendungen mit Deno auszuführen, müssen Sie lediglich eine ausführbare Datei für Ihre Plattform herunterladen, die etwa 30 MB groß ist, keine externen Abhängigkeiten aufweist und keine spezielle Installation auf dem System erfordert. Darüber hinaus ist deno keine monolithische Anwendung, sondern eine Sammlung von Rust-Crate-Paketen (deno_core, rusty_v8), die separat verwendet werden können;
  • Beim Starten des Programms sowie beim Laden von Modulen können Sie die URL-Adressierung nutzen. Um beispielsweise das Programm „welcome.js“ auszuführen, können Sie den Befehl „deno https://deno.land/std/examples/welcome.js“ verwenden. Code von externen Ressourcen wird heruntergeladen und auf dem lokalen System zwischengespeichert, aber nie automatisch aktualisiert (die Aktualisierung erfordert die explizite Ausführung der Anwendung mit dem Flag „--reload“);
  • Effiziente Verarbeitung von Netzwerkanfragen über HTTP in Anwendungen; die Plattform ist für die Erstellung leistungsstarker Netzwerkanwendungen konzipiert;
  • Die Möglichkeit, universelle Webanwendungen zu erstellen, die sowohl in Deno als auch in einem normalen Webbrowser ausgeführt werden können;
  • Das Vorhandensein eines Standardsatzes von Modulen, für deren Verwendung keine Bindung an externe Abhängigkeiten erforderlich ist. Module aus der Standardsammlung wurden zusätzlichen Audit- und Kompatibilitätstests unterzogen;
  • Zusätzlich zur Laufzeit fungiert die Deno-Plattform auch als Paketmanager und ermöglicht den Zugriff auf Module per URL innerhalb des Codes. Um beispielsweise ein Modul zu laden, können Sie im Code „import * as log from „https://deno.land/std/log/mod.ts“ angeben. Über die URL von externen Servern heruntergeladene Dateien werden zwischengespeichert. Die Bindung an Modulversionen wird durch die Angabe von Versionsnummern innerhalb der URL bestimmt, zum Beispiel „https://unpkg.com/“[E-Mail geschützt] /dist/liltest.js";
  • Die Struktur umfasst ein integriertes Abhängigkeitsprüfsystem (den Befehl „deno info“) und ein Dienstprogramm zur Codeformatierung (deno fmt);
  • Alle Anwendungsskripte können in einer JavaScript-Datei zusammengefasst werden.

Source: opennet.ru

Kommentar hinzufügen