Eines der guten Features, die in ES6 eingeführt wurden, waren Javascript-Module auf effiziente Weise, durch die wir Variablen, Funktionen und Klassen zwischen verschiedenen .js
-Dateien exportieren
und importieren
können.
Es gibt zwei verschiedene Möglichkeiten zum Exportieren: Named Exports und Default Exports. Um den Default Export richtig zu verstehen, müssen wir zunächst den Named Export gut verstehen.
Named Export
In diesem Fall exportieren wir in der source
-Datei die gewünschten Variablen, Funktionen oder Klassen mit einem bestimmten Namen. Die Syntax lautet wie folgt:
// Datei: source.js
export const myVariable = /* … */
export function myFunction() { /* … */ }
export class myClass { /* … */ }
Um nun auf die obigen Elemente in der target
-Datei zugreifen zu können, müssen wir sie wie folgt importieren:
// Datei: target.js (im selben Verzeichnis wie die source.js-Datei)
import { myVariable } from "./source.js"
import { myFunction } from "./source.js"
import { myClass } from "./source.js"
Jetzt ist es an der Zeit, zur Hauptfrage zu kommen: "Was ist genau der Default Export"?
Default Export
Abgesehen von den Fällen, in denen wir sie nach Namen exportiert haben (Named Exports), gibt es eine ähnliche Funktion namens Default Export, die nur einmal in jeder .js
-Datei verwendet werden kann. Sehen wir uns das folgende Beispiel an und vergleichen es mit der vorherigen source.js
-Datei:
// Datei: source.js
export default function myNewFunction() { /* … */ }
export const myVariable = /* … */
export function myFunction() { /* … */ }
export class myClass { /* … */ }
Tatsächlich kann jede .js
-Datei "mehrere Named Exports" und "nur einen Default Export" enthalten - hier wird myNewFunction
als default
exportiert. Beim Importieren in der target
-Datei erkennt Javascript somit, welches Element als default
exportiert ist.
Das Element, das als "Default" exportiert wird (myNewFunction
), wird in der target.js
-Datei wie folgt importiert:
// Datei: target.js (im selben Verzeichnis wie die source.js-Datei)
import anyName from "./source.js"
Schau dir die Unterschiede genau an! Hier haben wir kein { }
-Zeichen nach import
, und wir haben einen benutzerdefinierten Namen verwendet, den wir nicht in der source
-Datei hatten. Hier repräsentiert anyName
myNewFunction
.
Dies zeigt, dass wir dem Element, das als "Default" exportiert wird, "einen beliebigen gewünschten Namen" geben können, wenn wir es importieren und einfach auf den "Pfad" der source
-Datei zeigen, wird JavaScript diese Datei finden und importieren.
Einige wichtige Hinweise:
-
Im Gegensatz zu Named Exports müssen wir bei Default Export keine benannten Elemente exportieren und können auch "namenlose" Elemente exportieren.
-
Warum haben sie überhaupt das Default Export-Feature zu ES6 hinzugefügt? Für die Möglichkeit, "namenlose Elemente" (anonyme Funktionen und Klassen) sowie Ausdrücke und sogar Objektliterale neben benannten Elementen zu exportieren.