Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2023 browserübergreifend verfügbar.
import.meta.resolve() ist eine eingebaute Funktion, die auf dem import.meta-Objekt eines JavaScript-Moduls definiert ist. Sie löst einen Modulspezifizierer zu einer URL auf, indem sie die URL des aktuellen Moduls als Basis verwendet.
Ein String, der ein potenziell importierbares Modul spezifiziert. Dies kann ein relativer Pfad (wie "./lib/helper.js"), ein einfacher Name (wie "my-module") oder eine absolute URL (wie "https://example.com/lib/helper.js") sein.
Gibt einen String zurück, der dem Pfad entspricht, der importiert würde, wenn das Argument an import() übergeben würde.
import.meta.resolve() ermöglicht es einem Skript, auf den Modulspezifizierer-Auflösungsalgorithmus für einen Namen zuzugreifen, wie folgt:
Beachten Sie, dass import.meta.resolve() nur die Auflösung durchführt und nicht versucht, den resultierenden Pfad zu laden oder zu importieren. Daher ist der Rückgabewert identisch, unabhängig davon, ob der zurückgegebene Pfad einer existierenden Datei entspricht und unabhängig davon, ob diese Datei gültigen Code für ein Modul enthält. Dies ermöglicht es, dass import.meta.resolve() eine synchron Operation ist.
Es unterscheidet sich vom dynamischen Import, denn obwohl beide ein Modulspezifizierer als erstes Argument akzeptieren, gibt import.meta.resolve() den Pfad zurück, der importiert werden würde, ohne zu versuchen, auf diesen Pfad zuzugreifen. Daher sind die beiden folgenden effektiv derselbe Code:
Jedoch, selbst wenn "./lib/helper.js" nicht erfolgreich importiert werden kann, wird der zweite Ausschnitt keinen Fehler begegnen, bis er versucht, den Import in Zeile 2 durchzuführen.
Sie können einen einfachen Modulnamen (auch bekannt als einfacher Modulspezifizierer) an import.meta.resolve() übergeben, solange die Modulauflösung für den Namen definiert ist. Zum Beispiel können Sie dies in einem Browser mithilfe einer Importkarte definieren:
Da dieser Codeausschnitt nicht versucht, moduleEntryPath zu importieren — ebenso wenig die Importkarte — wird die aufgelöste URL angezeigt, unabhängig davon, ob ./modules/my-module/index.js tatsächlich existiert.
Der URL()-Konstruktor akzeptiert ein zweites Argument als Basis-URL. Wenn das erste Argument ein relativer Pfad ist und die Basis-URL import.meta.url ist, ist der Effekt ähnlich wie bei import.meta.resolve().
Dies ist auch eine nützliche Ersetzungssyntax, wenn ältere Browser unterstützt werden sollen. Es gibt jedoch einige Unterschiede:
Einige Tools erkennen new URL("./lib/helper.js", import.meta.url).href als Abhängigkeit von "./lib/helper.js" (ähnlich wie ein Import) und berücksichtigen dies bei Funktionen wie Bündelung, Import-Umschreibung für verschobene Dateien, "Gehe zu Quelle"-Funktionalität usw. Da import.meta.resolve() jedoch weniger mehrdeutig ist und speziell entwickelt wurde, um eine Abhängigkeitsauflösung des Modulpfads anzuzeigen, sollten Sie import.meta.resolve(moduleName) anstelle von new URL(moduleName, import.meta.url) für diese Anwendungsfälle verwenden, wann immer möglich.
import.meta.resolve() ist nicht im ECMAScript-Spezifikation für JavaScript-Module spezifiziert oder dokumentiert. Stattdessen definiert die Spezifikation das import.meta-Objekt, lässt jedoch alle seine Eigenschaften als "host-definiert". Der WHATWG HTML-Standard übernimmt dort, wo der ECMAScript-Standard aufhört, und definiert import.meta.resolve unter Verwendung der Modulspezifizierer-Auflösung.
Das bedeutet, dass import.meta.resolve() nicht von allen konformen JavaScript-Implementierungen implementiert werden muss. Allerdings kann import.meta.resolve() auch in nicht-browserbasierten Umgebungen verfügbar sein:
import.meta.resolve() ist besonders wertvoll für APIs, die einen Pfad zu einer Skriptdatei als Argument nehmen, wie der Worker() Konstruktor:
Dies ist auch nützlich, um Pfade für andere Worker zu berechnen, wie Dienstmitarbeiter und geteilte Mitarbeiter. Allerdings, wenn Sie einen relativen Pfad verwenden, um die URL eines Dienstmitarbeiters zu berechnen, bedenken Sie, dass das Verzeichnis des aufgelösten Pfades standardmäßig seinen Registrierungsbereich bestimmt (obwohl ein anderer Bereich während der Registrierung angegeben werden kann).
| HTML # import-meta-resolve |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.