import
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Mai 2018 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Die statische import-Deklaration wird verwendet, um schreibgeschützte Live-Bindungen zu importieren, die von einem anderen Modul exportiert werden. Die importierten Bindungen werden als Live-Bindungen bezeichnet, weil sie durch das Modul aktualisiert werden, das die Bindung exportiert hat, aber nicht durch das importierende Modul neu zugewiesen werden können.
Um die import-Deklaration in einer Quelldatei verwenden zu können, muss die Datei von der Laufzeitumgebung als Modul interpretiert werden. In HTML wird dies durch Hinzufügen von type="module" zum <script>-Tag erreicht. Module werden automatisch im strikten Modus interpretiert.
Es gibt außerdem ein funktionsähnliches dynamisches import(), das keine Skripte vom Typ type="module" erfordert.
Syntax
import defaultExport from "module-name";
import * as name from "module-name";
import { export1 } from "module-name";
import { export1 as alias1 } from "module-name";
import { default as alias } from "module-name";
import { export1, export2 } from "module-name";
import { export1, export2 as alias2, /* … */ } from "module-name";
import { "string name" as alias } from "module-name";
import defaultExport, { export1, /* … */ } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
defaultExport-
Name, der sich auf den Standardexport des Moduls bezieht. Muss ein gültiger JavaScript-Identifier sein.
module-name-
Das Modul, aus dem importiert werden soll. Es sind nur Zeichenfolgenliterale mit einfachen oder doppelten Anführungszeichen zulässig. Die Auswertung des Spezifizierers wird durch den Host festgelegt. Die meisten Hosts orientieren sich an Browsern und lösen die Spezifizierer als URLs relativ zur URL des aktuellen Moduls auf (siehe
import.meta.url). Node, Bundler und andere Nicht-Browser-Umgebungen definieren häufig eigene Funktionen zusätzlich dazu. Daher sollten Sie deren Dokumentation konsultieren, um die genauen Regeln zu verstehen. Der Abschnitt Auflösung von Modulspezifizierern enthält ebenfalls weitere Informationen. name-
Name des Modulobjekts, das beim Verweisen auf die Importe als eine Art Namespace verwendet wird. Muss ein gültiger JavaScript-Identifier sein.
exportN-
Name der zu importierenden Exporte. Der Name kann entweder ein Identifier oder ein Zeichenfolgenliteral sein, abhängig davon, was
module-nameals Export deklariert. Wenn es sich um ein Zeichenfolgenliteral handelt, muss es mit einem Alias versehen werden, der ein gültiger Identifier ist. aliasN-
Namen, die sich auf die benannten Importe beziehen. Müssen gültige JavaScript-Identifier sein.
Auf "module-name" kann eine Reihe von Importattributen folgen, die mit dem Schlüsselwort with beginnen.
Beschreibung
import-Deklarationen dürfen nur in Modulen und nur auf der obersten Ebene vorhanden sein (d.h. nicht innerhalb von Blöcken, Funktionen usw.). Wenn eine import-Deklaration in Nicht-Modul-Kontexten angetroffen wird (beispielsweise in <script>-Tags ohne type="module", eval, new Function, die alle „script“ oder „function body“ als Parsing-Ziele haben), wird ein SyntaxError ausgelöst. Verwenden Sie stattdessen die Syntax für den dynamischen Import, um Module in Nicht-Modul-Kontexten zu laden.
Alle importierten Bindungen dürfen sich nicht im selben Gültigkeitsbereich wie irgendeine andere Deklaration befinden, einschließlich der Deklarationen let, const, class, function, var und import.
import-Deklarationen sind bewusst syntaktisch strikt gestaltet (beispielsweise nur Zeichenfolgenliteral-Spezifizierer, nur auf der obersten Ebene zulässig, alle Bindungen müssen Identifier sein). Dadurch können Module statisch analysiert und verknüpft werden, bevor sie ausgewertet werden. Dies ist der Schlüssel dazu, Module von Natur aus asynchron zu machen, und ermöglicht Funktionen wie top-level await.
Auf das Schlüsselwort import kann ein „Phasenmodifizierer“ folgen, der den Modulimportprozess in einer bestimmten Phase anhält:
Jede dieser Syntaxformen wird als eigener Deklarationstyp betrachtet.
Formen von import-Deklarationen
Es gibt vier Formen von import-Deklarationen:
- Benannter Import:
import { export1, export2 } from "module-name"; - Standardimport:
import defaultExport from "module-name"; - Namespace-Import:
import * as name from "module-name"; - Import nur für Seiteneffekte:
import "module-name";
Nachfolgend finden Sie Beispiele zur Verdeutlichung der Syntax.
Benannter Import
Angenommen, ein Wert namens myExport wurde aus dem Modul my-module exportiert, entweder implizit als export * from "another.js" oder explizit mithilfe der export-Anweisung. Dadurch wird myExport in den aktuellen Gültigkeitsbereich eingefügt.
import { myExport } from "/modules/my-module.js";
Sie können mehrere Namen aus demselben Modul importieren.
import { foo, bar } from "/modules/my-module.js";
Sie können einen Export beim Importieren umbenennen. Beispielsweise wird dadurch shortName in den aktuellen Gültigkeitsbereich eingefügt.
import { reallyReallyLongModuleExportName as shortName } from "/modules/my-module.js";
Ein Modul kann ein Mitglied auch als Zeichenfolgenliteral exportieren, das kein gültiger Identifier ist. In diesem Fall müssen Sie ihm einen Alias geben, um es im aktuellen Modul verwenden zu können.
// /modules/my-module.js
const a = 1;
export { a as "a-b" };
import { "a-b" as a } from "/modules/my-module.js";
Hinweis:
import { x, y } from "mod" entspricht nicht import defaultExport from "mod" mit anschließendem Destrukturieren von x und y aus defaultExport. Benannte und Standardimporte sind in JavaScript-Modulen unterschiedliche Syntaxformen.