2016-02-11 13 views
9

Beim Import Export in ES6 mit, ich bin unten Störung zu erhalten:ES2015-Modul Import und Export Syntaxfehler

SyntaxError: export declarations may only appear at top level

Ich surfte zu finden, wie diese zu beheben, aber im nicht mehr zu. Kann jemand das erklären? Ich bin neu in ES6, vor allem für den Import und Export. (Ich benutzte StealJS komplett für diese Art von Sachen) Danke!

js Dateien sind:

app.js

import { cube, cubeRoot } from 'functions'; 

console.log(cube(4)); 
console.log(cubeRoot(125)); 

functions.js

// functions.js 

function cube(a) { 
    return a * a * a; 
} 

function cubeRoot(a) { 
    return Math.cbrt(a); 
} 

export { cube, cubeRoot} 
+3

Ist 'Funktionen' eine Datei oder ein Modul? Vielleicht brauchen Sie 'importieren {...} von './Functions'? –

+0

Sind Sie sicher, dass Sie nicht irgendwo eine streunende unerreichte öffnende Klammer haben? Ist das dein genauer Code? Können Sie uns das genaue Setup zeigen und wie Sie es transponieren? – Bergi

+0

Ist das die ganze Fehlermeldung? Hast du irgendwelche Zeilennummern oder so? – Bergi

Antwort

5

Update-Sommer 2017:

Siehe http://caniuse.com/#search=modules, neue Unterstützung, müssen vielleicht ändern die Einstellungen.

Jetzt sind die Dinge weniger vage. Um ein Modul funktionieren zu lassen, müssen Sie dem Browser mitteilen, dass es sich um ein Modul handelt (das andere Skript). Der erste Weg ist implizit, ein importiertes Modul ist immer ein Modul. Der zweite Weg ist mit Typ-Modul <script src="anymodule.js" type="module"></script>

Stellen Sie sicher, Import und Export sind nur auf höchster Ebene, nicht innerhalb eines Blocks, nicht innerhalb einer if-Anweisung, nicht innerhalb einer Schleife usw.

Auch stellen Sie sicher, Geben Sie unter den vollständigen Pfad (einschließlich .js) an. Er sollte mit ./ oder ../ beginnen. Assumming die Dateien sind in dem gleichen Ordner wäre es import { cube, cubeRoot } from './functions.js';

eval auf eine Modul-String wird nicht funktionieren.

Veraltete Antwort unten:

Der ES2015-Modul Import und Export Syntax wird nicht von jedem Browser zu der Zeit ich diese Antwort schreiben unterstützt (04/2016). Die Fehlermeldung ist fehlgeleitet, da die Syntax zwar unterstützt wird, aber nicht unterstützt wird. Siehe die erste Anmerkung hier https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import

Der Grund ist, weil die Spezifikation für Modullader noch in Arbeit ist. Siehe https://whatwg.github.io/loader/#status

Sie sind Werkzeuge jedoch zum Polyfill oder um diese Syntax automatisch wie Babel zu transpilieren.

+0

Ein fehlendes Modul-Feature in einem Browser würde nicht die Fehlermeldung der OP-Berichte verursachen. –

+0

der Fehler ist in der Tat Miss führen –

+2

Ich sage, dass, wenn ein Browser Module nicht unterstützt, würde es überhaupt diese Nachricht nicht generieren. Es würde eine Nachricht wie "Unerwarteter Token-Import" generieren. Daher liegt das Problem des OP anderswo. –