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 Mai 2018 browserübergreifend verfügbar.
Die export-Deklaration wird verwendet, um Werte aus einem JavaScript-Modul zu exportieren. Exportierte Werte können anschließend mit der import-Deklaration oder mit dynamic import in andere Programme importiert werden. Der Wert einer importierten Bindung kann sich im Modul, das ihn exportiert, ändern — wenn ein Modul den Wert einer von ihm exportierten Bindung aktualisiert, wird die Aktualisierung auch beim importierten Wert sichtbar.
Um die export-Deklaration in einer Quelldatei zu verwenden, muss die Datei vom Laufzeitsystem als Modul interpretiert werden. In HTML geschieht dies, indem type="module" zum <script>-Tag hinzugefügt wird, oder indem das Modul von einem anderen Modul importiert wird. Module werden automatisch im strict mode interpretiert.
Identifier, der exportiert werden soll (sodass er in einem anderen Skript via import importiert werden kann). Wenn Sie ein Alias mit as verwenden, kann der tatsächlich exportierte Name als String-Literal angegeben werden, das möglicherweise kein gültiger Identifier ist.
Jedes Modul kann zwei verschiedene Arten von Exporten haben, named export und default export. Ein Modul kann mehrere benannte Exporte haben, aber nur einen Standardexport. Jeder Typ entspricht einer der obigen Syntaxen.
Benannte Exporte:
Nach dem export-Schlüsselwort können Sie let-, const- und var-Deklarationen sowie Funktions- oder Klassendeklarationen verwenden. Sie können auch die Syntax export { name1, name2 } verwenden, um eine Liste von Namen zu exportieren, die anderweitig deklariert wurden. Beachten Sie, dass export {} kein leeres Objekt exportiert — es ist eine No-Op-Deklaration, die nichts exportiert (eine leere Namensliste).
Sie können export nicht auf eine using- oder await using-Deklaration anwenden. Sie können jedoch eine anderswo deklarierte Variable mit using oder await using exportieren. Dies wird jedoch dringend abgeraten, da die Variable verworfen wird, sobald das Modul fertig ausgeführt ist, wodurch alle Importeure einen bereits verworfenen Wert erhalten.
Export-Deklarationen unterliegen nicht den Regeln der temporal dead zone. Sie können deklarieren, dass das Modul X exportiert, bevor der Name X selbst deklariert ist.
Standardexporte:
Hinweis: Namen für Exportdeklarationen müssen sich voneinander unterscheiden. Doppelte Namen bei Exporten oder die Verwendung von mehr als einem default-Export führen zu einem SyntaxError und verhindern, dass das Modul ausgewertet wird.
Die export default-Syntax erlaubt jeden Ausdruck.
Als Sonderfall werden Funktionen und Klassen als Deklarationen exportiert, nicht als Ausdrücke, und diese Deklarationen können anonym sein. Das bedeutet, dass Funktionen gehoben werden.
Benannte Exporte sind nützlich, wenn Sie mehrere Werte exportieren müssen. Beim Importieren dieses Moduls müssen benannte Exporte mit genau demselben Namen (optional mit as umbenannt) referenziert werden, aber der Standardexport kann mit jedem Namen importiert werden. Zum Beispiel:
Sie können benannte Exporte auch umbenennen, um Namenskonflikte zu vermeiden:
Sie können einen Namen in etwas umbenennen, das kein gültiger Identifier ist, indem Sie ein String-Literal verwenden. Zum Beispiel:
Ein Modul kann auch Werte, die von anderen Modulen exportiert werden, "weiterleiten", ohne den Aufwand des Schreibens von zwei separaten Import-/Exportanweisungen. Dies ist oft nützlich, wenn man ein einzelnes Modul erstellt, das verschiedene Exporte aus verschiedenen Modulen an einem Ort konzentriert (üblicherweise als "Barrel-Modul" bezeichnet).
Dies kann mit der "export from"-Syntax erreicht werden:
Was vergleichbar ist mit einer Kombination aus Import und Export, außer dass function1 und function2 im aktuellen Modul nicht verfügbar werden:
Die meisten "import from"-Syntaxen haben "export from"-Gegenstücke.
Es gibt auch export * from "mod", obwohl es kein import * from "mod" gibt. Dies re-exportiert alle benannten Exporte von mod als die benannten Exporte des aktuellen Moduls, aber der Standardexport von mod wird nicht re-exportiert. Wenn zwei Wildcard-Exportanweisungen denselben Namen implizit re-exportieren, wird keiner re-exportiert.
Der Versuch, den doppelten Namen direkt zu importieren, führt zu einem Fehler.
Das Folgende ist syntaktisch ungültig, trotz des gleichwertigen Imports:
Die korrekte Methode dazu ist, den Export umzubenennen:
Die "export from"-Syntax erlaubt es, das as-Token wegzulassen, was den Standardexport immer noch als Standardexport re-exportiert.
export from unterstützt alle Features, die import unterstützt — zum Beispiel Importattribute:
In einem Modul my-module.js könnten wir den folgenden Code einfügen:
Dann im Top-Level-Modul, das in Ihrer HTML-Seite enthalten ist, könnten wir haben:
Es ist wichtig, Folgendes zu beachten:
Wenn wir einen einzelnen Wert exportieren wollen, der ein ganzes Modul repräsentiert, könnten wir einen Standardexport verwenden:
Dann, in einem anderen Skript, ist es einfach, den Standardexport zu importieren:
Nehmen wir ein Beispiel, bei dem wir die folgende Hierarchie haben:
So würde es mit Code-Snippets aussehen:
| ECMAScript® 2027 Language Specification # sec-exports |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.