Heim >Web-Frontend >js-Tutorial >Deno -Module: Nutzung, Best Practices und Knotenmodulimporte

Deno -Module: Nutzung, Best Practices und Knotenmodulimporte

Joseph Gordon-Levitt
Joseph Gordon-LevittOriginal
2025-02-12 08:33:10586Durchsuche

Deno Modules: Usage, Best Practices & Node Module Imports

in das Deno -Modul eingraben - Wenn Sie von node.js stammen, ist dies die größte Workflow -Änderung, die Sie begegnen. Erfahren Sie, wie sie funktionieren und wie Sie sie am besten verwenden, wie Sie Node.js -Module und NPM -Pakete in Deno und mehr verwenden.

node.js ist eine JavaScript -Laufzeit, die auf Chrome V8 -Engine basiert, die von Ryan Dahl entwickelt und 2009 veröffentlicht wurden.

Deno ist auch eine JavaScript -Laufzeit, die auf Chrome V8 -Engine basiert, die von Ryan Dahl entwickelt und im Jahr 2020 veröffentlicht wurden. Es wird basierend auf einem Jahrzehnt Erfahrung erstellt. Dies bedeutet nicht unbedingt, dass es sich um eine Fortsetzung von Node.js oder einer fortgeschritteneren Alternative handelt, aber es weicht vom Pfad von Node.js ab.

Siehe auch:

  • Unser Deno -Leitfaden, einschließlich unseres Deno -Inhaltsindex (scrollen Sie bis zum Ende)
  • Vergleich von Node.js vs. Deno und einer Anleitung zur Auswahl von Tools, die zu einer bestimmten Situation entsprechen

Hauptunterschiede: Deno unterstützt nativ Typscript-, Sicherheits-, Test- und Browser -APIs. Die Modulverarbeitung hat weniger Beachtung erhalten, kann jedoch die größte Veränderung in der Art und Weise sein, wie JavaScript -Anwendungen erstellt werden. Bevor Sie über Deno sprechen, lassen Sie mich Sie zurück in eine einfachere Ära bringen ...

Schlüsselpunkte

  • Deno ist eine JavaScript -Laufzeit, die auf Chrome V8 -Engine basiert, die von Node.js abweicht, indem sie die APIs von TypeScript, Sicherheit, Test und Browser nativ unterstützt. Im Gegensatz zu Node.js unter Verwendung von CommonJs verwendet es auch ES2015 -Module, die aus absoluten oder relativen URLs importiert werden.
  • Deno hat keinen Paketmanager wie NPM in node.js. Stattdessen wird, wenn es zum ersten Mal auf die URL eines Moduls im Skript trifft, es heruntergeladen und in das globale Verzeichnis zwischengewertet, was bedeutet, dass unabhängig davon, wie viele Projekte sich darauf beziehen, nur eine Kopie der spezifischen Modulversion benötigt wird.
  • Deno ermöglicht die Versionierung von Modul -URLs, sodass auf bestimmte Codeversionen verwiesen werden können. Es unterstützt auch das Importieren jedes in einem Projekt verwendeten Modul mit einer einzigen Abhängigkeitsdatei oder das Zuweisen eines Namens einer vollständigen oder teilweisen URL mit einer Importkarte.
  • Die Plattform verfügt über integrierte Sicherheit, beschränkt das Dateisystem und den Netzwerkzugriff und bietet Integritätsprüfungsoptionen. Es unterstützt auch die Verwendung der Node.js-API- und plattformübergreifenden Module, die auf Node.js und Deno ohne besondere Verarbeitung ausgeführt werden, und solche Module werden möglicherweise immer beliebter, da das JavaScript-Laufzeit-Ökosystem sich weiterhin weiterentwickelt.

node.js Modul

2009 hatte JavaScript kein Standardmodulsystem. Ein Teil davon ist der Hintergrund des Browsers, und es wird mehrere Jahre dauern, bis ES6/ES2015 erscheint.

node.js ist unvorstellbar, wenn es keine Module bereitstellt, weshalb es CommonJs aus mehreren Problemumgehungen in der Gemeinde übernimmt. Dies hat zur Entwicklung des Node Paket Manager (NPM) geführt, mit dem Entwickler ihre eigenen JavaScript -Module problemlos suchen, verwenden und veröffentlichen können.

Die Verwendung von

NPM hat exponentiell zugenommen. Es ist zum beliebtesten Paketmanager aller Zeiten geworden, und bis Mitte 2020 wurden fast 1,5 Millionen Module mit mehr als 800 Neuzugang pro Tag veranstaltet (Quelle: ModuleCounts.com).

Deno -Modul

Deno wählen Sie die ES2015 -Module aus, die Sie aus absoluten oder relativen URLs importieren können:

<code>import { something } from 'https://somewhere.com/somehow.js';
</code>

Das Skript in dieser URL muss die Funktion oder andere Werte entsprechend exportieren, z. B.

<code>export function something() {
  console.log('something was executed');
}
</code>

Deno verwendet das gleiche Modulsystem wie in modernen Webbrowsern.

node.js unterstützt auch ES2015 -Module ... aber das ist kompliziert und immer noch experimentell. CommonJS und ES2015 -Module sehen ähnlich aus, arbeiten jedoch anders:

  • CommonJS lädt Abhängigkeiten vom Dateisystem nach Bedarf bei der Ausführung von Code.
  • Das ES-Modul wird von der URL vorgezogen, um weitere Importe zu beheben, bevor der Code ausgeführt wird.

node.js muss weiterhin CommonJs unterstützen und gemischte ES -Module verarbeiten. Daher wird angenommen:

  1. Dateien, die mit .CJS enden, verwenden CommonJS
  2. Dateien, die in .MJS enden, verwenden das ES -Modul
  3. Dateien, die in .js enden, sind CommonJs, es sei denn, Das neueste Paket.json setzt "Typ": "Modul" oder der Knoten mit der Option-Input-Typ = Modul ausgeführt.
Es kann verstanden werden, warum Deno ein einzelnes Standardmodulsystem ausgewählt hat. NPM ist jedoch ein wichtiger Faktor für den Erfolg von Node, daher ist es überraschend, dass Deno ihn abgesagt hat.

Kein Paketmanager.

Eine Kritik an NPM ist die große Skala des Node_Modules -Verzeichnisses für jedes Projekt. Da ein Modul eine bestimmte Version anderer Module benötigt, kann es Hunderte von Megabyten in Größe erreichen.

Deno Modules: Usage, Best Practices & Node Module Imports

Deno downloads und zwischengespeichert es in das globale Verzeichnis, wenn Deno zum ersten Mal auf die URL eines Moduls im Skript trifft. Unabhängig davon, wie viele Projekte sich darauf beziehen, ist nur eine Kopie der spezifischen Modulversion erforderlich.

Ich weiß, dass Sie denken: "Ah, aber wenn ..."

… aber Deno hat die Möglichkeit, das von der Modul -URL aufgeworfene Problem zu lösen.

unzuverlässige URL

Die URL kann vorübergehend scheitern, dauerhaft ändern oder verschwinden. Dies ist ein Problem für jeden Paketmanager, und NPM hat auch in der Vergangenheit Probleme gestoßen (es ermöglicht auch die Installation von URLs).

Für kritische node.js -Anwendungen wird empfohlen, Ihr Verzeichnis node_modules zum git/anderen Repository Ihres Projekts hinzuzufügen.

Deno unterstützt ähnliche Optionen. Sie können die Umgebungsvariable der Deno_dir im aktuellen Projekt auf den Verzeichnispfad einstellen, zum Beispiel:

<code>DENO_DIR=~/myproject/deno_modules`
</code>
verwendet in Windows CMD:

<code>> set DENO_DIR="C:\myproject\deno_modules"
</code>
oder Windows PowerShell:

<code>> $env:DENO_DIR="C:\myproject\deno_modules"
</code>
Wenn Ihre Anwendung ausgeführt wird, richtungssetzt die Module die Module in dieses Verzeichnis, damit sie zum Quell -Steuerrepository des Projekts hinzugefügt werden können.

Sie können auch in Betracht ziehen, Abhängigkeiten in eine einzelne JavaScript- oder Typscript -Datei zu bündeln. Der Befehl Deno Bundle kann dies in einem Schritt tun:

<code>deno bundle myscript.js myscript.bundle.js</code>
wobei myScript.js ein Eintragskript ist, das normalerweise mit Deno -Lauf ausgeführt wird. Die generierte eigenständige Datei myScript.bundle.js kann an einem Echtzeitserver bereitgestellt werden.

Bundle mit oben erwarten

Deno unterstützt auf Top-Level-Wartezeit: Sie müssen nicht auf den Aufruf in einer anonymen asynchronisierten Funktion warten. Leider ist die oberste Ebene im Bündel fehlgeschlagen, sodass die Wrapper-Funktion hinzugefügt werden muss. Dies ist ein bekanntes Problem und wird in einer zukünftigen Veröffentlichung behoben.

Zuletzt: Vorsicht vor zufälligen Deno -Modulen auf ungewöhnlichen URLs! Deno-, Github- oder Bitbucket -URLs mit guten Dokumentation und Eingabe der Community sind im Allgemeinen sicherer.

Modulversionskontrolle

Im Idealfall sollte die Modul -URL versioniert werden, damit Sie eine bestimmte Codeversion verweisen können. Mit der Deno -Standardbibliothek können Sie beispielsweise bestimmte Versionen von HTTP -Servermodulen laden:

<code>import { something } from 'https://somewhere.com/somehow.js';
</code>

Sie können sich auch auf den Master -Zweig beziehen:

<code>export function something() {
  console.log('something was executed');
}
</code>

Aber dies wird die neueste Version herunterladen, und zukünftige Versionen können mit Ihrer Anwendung unvereinbar sein.

Sie können ähnliche Versionskontrventionen für Versionen verwenden, um Deno -Module auf Ihren eigenen Servern zu veröffentlichen, aber da sie populärer wird, erhalten Ihre Website möglicherweise viel Verkehr. Eine zuverlässigere Möglichkeit besteht darin, ein Repository von Diensten wie GitHub zu verwenden und jeder Version ein Git -Tag zuzuweisen. Dienste wie Denopkg.com und UNPKG.com können zur Bereitstellung von URLs mit öffentlich versionierten Modul verwendet werden.

Multiple Modul erwähnt

Sie müssen möglicherweise auf die gleiche Modul -URL in vielen Dateien in der Anwendungscode -Basis verweisen. Wenn Sie das Modul aktualisieren möchten, müssen Sie die URL an mehreren Stellen ändern. Suche und Ersetzen können funktionieren, aber es ist ungeschickt, fehleranfällig und erhöht die Wahrscheinlichkeit von Zusammenführungskonflikten.

Alternativ können Sie eine einzige Abhängigkeitsdatei verwenden, die jedes im Projekt verwendete Modul importiert. Es heißt normalerweise DEPS.JS oder DEPS.TS:

<code>DENO_DIR=~/myproject/deno_modules`
</code>

Sie können dann auf das Deno -Modul aus DEPS.js in jeder anderen Projektdatei verweisen:

<code>> set DENO_DIR="C:\myproject\deno_modules"
</code>

Wenn das Modul aktualisiert wird, müssen Sie nur die einzelne URL -Referenz in DEPS.Js.

Eine andere Option besteht darin, die Karte zu importieren. Dies handelt

<code>> $env:DENO_DIR="C:\myproject\deno_modules"
</code>
Sie können den Namen des Kartens importieren in jedem Skript verweisen:

<code>deno bundle myscript.js myscript.bundle.js</code>
Importieren Sie bei der Ausführung der Anwendung mit Deno die JSON -Datei:

<code>import { serve } from 'https://deno.land/std@0.61.0/http/server.ts';
</code>
Importkarten sind derzeit eine instabile Funktion, sodass das Onestable -Flag erforderlich ist. Diese Funktion kann sich in zukünftigen Deno -Versionen ändern.

Integrität der Untersuchung

Der aus der URL verwiesene Code kann ohne Ihr Wissen geändert oder gehackt werden. Bekannte Websites wurden gehackt, weil sie direkt mit dem Client-Code von Drittanbietern verknüpft sind. Stellen Sie sich vor, wie viel Schaden es verursachen würde, wenn ein Skript auf die Serverressourcen zugreifen könnte.

Deno verfügt über integrierte Sicherheit, sodass Skripte mit Flags wie-Allow-Read und -Allow-Net ausgeführt werden müssen, um das Dateisystem und den Netzwerkzugriff zu begrenzen. Dies wird dazu beitragen, einige Probleme zu vermeiden, aber dies ist kein Ersatz für die Überprüfung der Modulintegrität!

Deno bietet eine Integritätsprüfungsoption. Wenn Sie eine einzelne Abhängigkeitsdatei verwenden (wie oben erwähnt), ist sie am einfachsten:

<code>import { serve } from 'https://deno.land/std/http/server.ts';
</code>
Der folgende Deno -Befehl generiert eine lock.json -Datei mit der Prüfsumme aller importierten Deno -Module:

<code>import { something } from 'https://somewhere.com/somehow.js';
</code>

Wenn ein anderer Entwickler Ihr Projekt kloniert, kann sie jedes Modul neu laden und die Integrität jedes Moduls überprüfen, um sicherzustellen, dass sie mit Ihrem Modul übereinstimmen:

<code>export function something() {
  console.log('something was executed');
}
</code>

Deno erzwingt keine Integritätsprüfungen. Es ist am besten, diese Prozesse als automatisierte Git -Hooks oder ähnliche Vorgänge auszuführen.

Verwenden von Node.js Modul

Viele Node.js -APIs wurden für Deno kopiert - siehe Deno.land/std/node. Dies ist keine vollständige Liste, aber Sie finden gemeinsame Dateien, Ereignisse, Puffer und Versorgungsmodule.

Die Sammlung von fast 800 Deno-Modulen von Drittanbietern wird unter

deno.land/x bereitgestellt. Es gibt Frameworks ähnlich wie Express.js, Datenbanktreiber, Verschlüsselungsfunktionen, Befehlszeilen -Tools usw.

Sie finden auch eine ausgewählte Liste der beliebten Module wie Awesome Deno.

Sie können jedoch möglicherweise einen der 1,5 Millionen Node.js -Module importieren. Mehrere CDNs können NPM/CommonJS -Pakete in ES2015 -Modul -URLs konvertieren, einschließlich:

    skypack.dev
  • jspm.org
  • unpkg.com
  • (Hinzufügen von MODUL -Abfrage -Zeichenfolge in der URL)
ob das Modul, das Sie benötigen, in Deno ordnungsgemäß funktioniert, ist eine andere Angelegenheit.

Zum Glück können plattformübergreifende Module, die auf Node.js und Deno ohne besondere Verarbeitung ausgeführt werden, als JavaScript-Laufzeit-Ökosystem entstehen.

Mehr Modulfragen

sich auf Modul -URLs bezieht, ist umstritten und für diejenigen aus sehr beliebtem NPM kann es störend sein. Das heißt, Deno vereinfacht die Verwendung von JavaScript -Modulen. Es befasst sich mit mehreren NPM -Kritikpunkten und gleichzeitig viele mögliche Nebenwirkungen des ES2015 -Moduls.

Aber das ist alles andere als perfekt.

Es ist einfach, NPM -Module zu veröffentlichen, und es ist auch einfach, nach NPMJs.com zu suchen. Ihre Suchbegriffe können 500 Ergebnisse zurückgeben. Durch die Rangliste von Paketen nach Beliebtheit, Qualität und Wartungsfaktoren können Sie die Auswahllähmung minimieren.

ist schwierig, den Code in eine Liste von Modulen von Drittanbietern in Deno zu senden. Module müssen automatisierte Tests bestehen, aber die Qualität kann nicht garantiert werden, und die Suchergebnisse sind alphabetisch angeordnet. Sobald die Anzahl der Module ein paar tausend erreicht, dürften vorhandene Systeme nicht dauern.

Es ist auch einfach, Pakete in NPM zu aktualisieren. Sie können NPM veraltet ausführen, um die Aktualisierungsliste anzuzeigen, oder einfach die NPM -Installation ausführen, wenn Sie auf eine lockere Versionsnummer in package.json verweisen.

Es gibt keine äquivalente Update -Check -Option in Deno. Es gibt Paket-ähnliche Projekte, einschließlich Trex, Update-Begrenzungsabhängigkeiten und Deno-Check-Updates. Diese Projekte beruhen jedoch normalerweise auf Importkarten und stützen sich immer auf semantische Versions-URLs.

Sollten Sie zu Deno wechseln?

node.js starb nicht. Es ist gereift und verfügt über zehn Jahre Erfahrung in Modulen, Technologie, Dokumentation und Laufzeit.

Deno nutzt den größten Teil dieses Wissens, ist aber sehr neu und wird sich in den kommenden Jahren schnell entwickeln. Für große Anwendungen kann es zu früh sein, aber für kleine Projekte ist das Risiko geringer. Diejenigen, die TypeScript oder in anderen Sprachen bereits verwenden, haben möglicherweise eine viel leichtere Erfahrung, aber Node.js -Entwickler haben keine Schwierigkeiten, in deno zu konvertieren und dann zurück zu konvertieren.

Deno hat jedoch einen interessanten Vorteil:

  • Das Modulsystem ist das gleiche wie Client JavaScript
  • Implementieren Sie viele Browser -APIs: Sie können Fensterobjekte verweisen, Ereignishörer festlegen, Webarbeiter starten, Remote -Serveranforderungen mithilfe der API Fetch () und mehr stellen.

Der Traum von isomorphen JavaScript -Bibliotheken, die entweder auf Client oder Server arbeiten, ist ein großer Schritt weiter.

Deno -Grundlagen

Erfahren Sie schnell über Deno. Unsere Sammlung von Deno -Grundlagen hilft Ihnen dabei, den ersten Schritt in die Deno -Welt und darüber hinaus zu machen, und wir fügen ihm immer wieder Inhalte hinzu. Wir werden Ihnen die Tutorials zur Verfügung stellen, die Sie benötigen, um ein Profi zu werden. Sie können den Index am Ende unseres Deno -Erste -Start -Handbuchs jederzeit aktualisieren:

➤ Deno -Grundlagen

häufig gestellte Fragen zum Deno -Modul

Was ist ein Deno -Modul? Das Deno -Modul ist eine Codeeinheit in Deno, eine sichere Laufzeit für JavaScript und TypeScript. Module in Deno ähneln den CommonJS -Modulen in Node.js- und ES6 -Modulen in modernen JavaScript. Sie ermöglichen Entwicklern, Code zu organisieren und zu teilen, indem sie ihn in wiederverwendbare und verkapselte Blöcke zerlegen.

Wie erstelle ich Module in Deno? Das Erstellen von Modulen in Deno ist einfach. Sie können eine neue Datei erstellen (z. B. modul.ts), Ihre Funktionen oder Klassen definieren und sie dann mit dem Schlüsselwort für Exportieren exportieren. Andere Deno -Skripte können diese Module importieren und verwenden.

Wie importiere ich Module in Deno? Um ein Modul in Deno zu importieren, können Sie das Schlüsselwort importieren, gefolgt vom Pfad oder der URL des Moduls. Deno unterstützt lokale und entfernte Importe.

Kann ich Module von Drittanbietern in Deno verwenden? Ja, Deno unterstützt das Importmodulen direkt von URLs aus, sodass Sie Module von Drittanbietern verwenden können, die in Paketregistrierung oder GitHub-Repository gehostet werden.

Das obige ist der detaillierte Inhalt vonDeno -Module: Nutzung, Best Practices und Knotenmodulimporte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn