Dies sind meine Beispieldateien:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="t1.js"></script>
</head>
<body></body>
</html>
t1.js:
import Test from 't2.js';
t2.js:
export const Test = console.log("Hello world");
Wenn ich die Seite in Firefox 46 lade, wird "SyntaxError: Importdeklarationen werden möglicherweise nur auf der obersten Ebene eines Moduls angezeigt" zurückgegeben. Ich bin mir jedoch nicht sicher, wie viel mehr oberste Ebene die Importanweisung hier erhalten kann. Ist dieser Fehler ein roter Hering und wird Import / Export einfach noch nicht unterstützt?
javascript
html
firefox
ecmascript-6
es6-modules
Christoph Burschka
quelle
quelle
Antworten:
Der Fehler, den Sie erhalten haben, war, dass Sie explizit angeben müssen, dass Sie ein Modul laden - nur dann ist die Verwendung von Modulen zulässig:
Ich habe es in diesem Dokument über die Verwendung des ES6-Imports im Browser gefunden . Literatur-Empfehlungen.
Vollständig unterstützt in diesen Browserversionen (und höher; vollständige Liste auf caniuse.com ):
In älteren Browsern müssen Sie möglicherweise einige Flags in Browsern aktivieren:
chrome:flags
.dom.moduleScripts.enabled
Einstellenabout:config
.about:flags
.quelle
import
nicht mehr unterstützt wird.import Test from './t2.js';
'./t2.js'
und nicht'./t2'
ohne.js
?Das ist nicht mehr richtig. Alle aktuellen Browser unterstützen jetzt ES6-Module
Ursprüngliche Antwort unten
Von
import
auf MDN :Browser unterstützen nicht
import
.Hier ist die Browser-Support-Tabelle:
Wenn Sie ES6-Module importieren möchten, würde ich die Verwendung eines Transpilers (z. B. babel ) vorschlagen .
quelle
Nur die Verwendung der Dateierweiterung .js beim Importieren von Dateien löste das gleiche Problem (vergessen Sie nicht, das
type="module
Skript-Tag festzulegen ).Schreiben Sie einfach:
anstatt
quelle
Sie müssen angeben, dass der Typ im Skript eingegeben werden soll, und der Export muss die Standardeinstellung sein.
Verwenden Sie für t2.js nach dem Export die Standardeinstellung wie folgt, exportieren Sie die Standardeinstellung "Hier geht Ihr Ausdruck" (hier können Sie keine Variablen verwenden) . Sie können die folgende Funktion verwenden:
und für den Import sollte Ihre Importsyntax wie folgt lauten : Importieren Sie den Druck aus './t2.js' (verwenden Sie die Dateierweiterung und ./ für dasselbe Verzeichnis). Ich hoffe, dies wäre nützlich für Sie!
quelle
Aus Gründen der Argumentation ...
Man könnte dem globalen Fensterobjekt eine benutzerdefinierte Modulschnittstelle hinzufügen. Es wird jedoch nicht empfohlen. Andererseits ist das DOM bereits kaputt und nichts bleibt bestehen. Ich benutze dies die ganze Zeit, um dynamische Module zu laden und benutzerdefinierte Listener zu abonnieren. Dies ist wahrscheinlich keine Antwort - aber es funktioniert. Der Stapelüberlauf hat jetzt ein module.export, das ein Ereignis namens 'Spork' aufruft - zumindest bis zur Aktualisierung ...
quelle