Strukturiere deine Projekte mit ES-Modulen, indem du ihre statische Analyse nutzt und toxische Barrels sowie zirkuläre Abhängigkeiten vermeidest.
Diese Lektion in Kodokon öffnenES-Module sind statisch: import- und export-Anweisungen werden aufgelöst, wenn die Datei geparst wird, bevor irgendein Code läuft. Genau das ermöglicht Tree-Shaking (das Entfernen von Code, der nie importiert wird) und das Aufspüren von Namensfehlern zur Build-Zeit. Benannte Exporte oder Standard-Export? Benannte Exporte gewinnen an fast jeder Front: refactoring-freundliches Umbenennen, zuverlässige Autovervollständigung und keine Möglichkeit, dieselbe Sache unter zehn verschiedenen Namen zu importieren. Hebe dir den Standard-Export für den Fall auf, in dem das Modul eine offensichtliche Sache exportiert.
export const TAX_RATE = 0.2;
export function applyTax(price) {
return price * (1 + TAX_RATE);
}
export default class Cart {
items = [];
add(item) {
this.items.push(item);
return this;
}
}Auf der Verbraucherseite gibt es vier Formen: benannter Import (mit optionalem Aliasing über as), Standard-Import, Namensraum-Import (* as) und dynamischer Import import(), der eine Promise eines Namensraums zurückgibt. Letzterer ist der Baustein des Code-Splittings: Lade ein schweres Modul (Editor, Diagramm, PDF) erst in dem Moment, in dem der Nutzer es tatsächlich braucht.
import Cart, { applyTax, TAX_RATE } from "./cart.js";
import * as cartModule from "./cart.js";
console.log(applyTax(100), TAX_RATE); // 120 0.2
console.log(cartModule.TAX_RATE); // 0.2
const lazy = await import("./cart.js");
const cart = new lazy.default();
console.log(cart instanceof Cart); // trueZur Organisation solltest du lieber nach Feature aufteilen (features/cart/, features/auth/) als nach technischem Typ (controllers/, helpers/): Code, der sich gemeinsam ändert, lebt gemeinsam, und ein Feature zu entfernen bedeutet, einen Ordner zu löschen. Stelle jedes Feature über einen schmalen Einstiegspunkt bereit und behandle jeden Import, der diesen Einstiegspunkt umgeht, als Grenzverletzung.
import("./module.js") zurück?