DanLevy.net

ESM‑Exporte: benannt vs. default?

Benennen oder nicht benennen?

Hero image for ESM‑Exporte: benannt vs. default?

Sollten Sie named oder default Exports in JavaScript verwenden?

Es gibt keinen Mangel an stark formulierten Artikeln zu diesem Thema.

Die Mehrheit beurteilt default export als „schrecklich“. Andere vertreten die Ansicht, dass default gewinnen sollte (z. B. der AirBnb‑Style‑Guide).

Sie schieben die Schuld häufig auf völlig temporäre Dinge: IDE‑Auto‑Import‑Fehler, die Tree‑Shaking‑Fähigkeiten eines bestimmten Bundlers oder die bloße Möglichkeit von Tippfehlern beim Benennen eines Imports.

Haben wir den eigentlichen Sinn des export‑Mechanismus verfehlt?

Code ist Kommunikation. ✨

Wir senden ein Signal an import‑Aufrufer, wie ein Objekt zu benutzen ist.

Was sagen wir damit?

Im Groben gibt es in modernem JavaScript zwei Arten, Dinge zu exportieren:

Natürlich kann man beides kombinieren oder unterschiedliche Strategien für verschiedene Bereiche des Code‑Bases verwenden. Siehe weitere Beispiele am Ende des Artikels.

Schwache Argumente, Mann

Lassen Sie uns einige der häufigen „temporären Probleme“ angehen, auf die Entwickler stoßen.

// Sie können beides aliasen!
import { Knife as Handle } from "./knife.js"; // 🔪
import { default as Handle } from "./knife.js"; // 🔪
import Handle from "./knife.js"; // 🔪

Zusammenfassung

Es gibt tatsächlich zahlreiche Kombinationen, wie wir Dinge exportieren können – jede erzählt eine andere Geschichte:

Default (Exports)Named (Exports)Private FnsPatternBedeutung
Ein Default‑Export.„Präsentiere EINE Funktion mit einem einzigen Zweck!“
Ein benannter Export.„Bitte nicht umbenennen.“
Default‑Export + mehrere „private“ nicht exportierte Funktionen„Hier ist etwas zusammengehörige Logik. Außerdem erwartete Klassen‑ähnliche Verhaltensweisen.“
Mehrere benannte Exporte, generischer Dateiname.„Ein Sammelsurium lose zusammenhängender Dinge, ohne implizite Hierarchie.“
Ein benannter Export, zusätzlich als Default exportiert.„Sie können mich nicht falsch importieren.“

Etwas zum Nachdenken: Was sagen wir, wenn der Dateiname mit einem seiner Exporte übereinstimmt oder nicht? (Zum Beispiel eine utils.js mit vielen Funktionen.)

Fazit

Wenn Code Kommunikation ist, dann export Sie bitte, als meinen Sie es verdammt ernst. 💞