Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 153
5.7.4import und export
ОглавлениеDie import- und export-Deklarationen werden zusammen verwendet, um Werte, die in einem Modul von JavaScript-Code definiert sind, in einem anderen Modul verfügbar zu machen. Ein Modul ist eine Datei mit JavaScript-Code mit einem eigenen globalen Namensraum, der völlig unabhängig von allen anderen Modulen ist. Einen Wert (wie eine Funktion oder Klasse), der in einem Modul definiert ist, kann man in einem anderen Modul nur verwenden, wenn das definierende Modul ihn mit export exportiert und das verwendende Modul ihn mit import importiert. Module sind Gegenstand von Kapitel 10, und import und export werden ausführlich behandelt in 10.3.
import-Direktiven werden verwendet, um Werte aus einer anderen JavaScript-Datei zu importieren und ihnen Namen innerhalb des aktuellen Moduls zu geben. Es gibt einige unterschiedliche Formen von import-Direktiven. Hier ein paar Beispiele:
import Circle from './geometry/circle.js';
import { PI, TAU } from './geometry/constants.js';
import { magnitude as hypotenuse } from './vectors/utils.js';
Werte innerhalb eines JavaScript-Moduls sind privat und können nicht in andere Module importiert werden, es sei denn, sie wurden explizit exportiert. Die export-Direktive macht genau das: Sie legt fest, dass ein oder mehrere Werte, die im aktuellen Modul definiert sind, exportiert werden und somit für den Import durch andere Module zur Verfügung stehen. Die export-Direktive besitzt mehr Varianten als die import-Direktive. Auch hierzu einige Beispiele:
// geometry/constants.js
const PI = Math.PI;
const TAU = 2 * PI;
export { PI, TAU };
Das Schlüsselwort export wird manchmal als Modifikator anderer Deklarationen verwendet, was zu einer Art zusammengesetzter Deklaration führt, die eine Konstante, Variable, Funktion oder Klasse definiert und sie gleichzeitig exportiert. Und soll nur ein einziger Wert eines Moduls exportiert werden, geschieht dies normalerweise mit der speziellen Form export default:
export const TAU = 2 * Math.PI;
export function magnitude(x,y) { return Math.sqrt(x*x + y*y); }
export default class Circle { /* Klassendefinition hier weggelassen */ }