2016-02-11 4 views
9

On utilizzando import export in ES6, sto ottenendo sotto l'errore:ES2015 modulo di importazione e di esportazione di sintassi errore

SyntaxError: export declarations may only appear at top level

ho navigato per trovare il modo di risolvere questo problema, ma in grado di im. Qualcuno può spiegare questo. Sono nuovo di ES6, soprattutto per importare ed esportare. (Stavo usando StealJS completamente per questo genere di cose) Grazie!

file JS sono:

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

'function' è un file o un modulo? Forse hai bisogno di 'import {...} da './Functions''? –

+0

Sei sicuro di non avere un paio di parentesi graffe ineguagliate? È questo il tuo codice esatto? Puoi mostrarci la configurazione esatta e come la stai trasponendo? – Bergi

+0

È questo l'intero messaggio di errore? Hai qualche numero di linea o giù di lì? – Bergi

risposta

5

Aggiornamento estate 2017:

Vedi http://caniuse.com/#search=modules, il nuovo supporto, forse bisogno di cambiare impostazioni.

Ora che le cose sono meno vaghe. Per far funzionare un modulo devi dire al browser che è che si tratta di un modulo (l'altro è uno script). Il primo modo è implicito, un modulo importato è sempre un modulo. Il secondo modo è con modulo tipo <script src="anymodule.js" type="module"></script>

Assicurarsi importazione e di esportazione sono solo a livello superiore, non all'interno di un blocco, non all'interno di un'istruzione if, non all'interno di un ciclo, ecc

assicurarsi anche a fornire il percorso completo (incluso .js), dovrebbe iniziare con ./ o ../. Supponendo che i file si trovino nella stessa cartella, sarebbe import { cube, cubeRoot } from './functions.js';

eval su una stringa di modulo non funzionante.

risposta obsolete di seguito:

L'importazione del modulo ES2015 e la sintassi di esportazione non è supportato da tutti i browser, al momento che scrivo questa risposta (04/2016). Manca il messaggio di errore perché implica che la sintassi è supportata, ma non è supportata affatto. Vedere la prima nota qui https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import

Il motivo è perché le specifiche per i caricatori di moduli sono ancora in corso. Vedi https://whatwg.github.io/loader/#status

Sono tuttavia strumenti per il polyfill o per traspolare automaticamente questa sintassi come babel.

+0

Una funzione di modulo mancante in un browser non causerebbe il messaggio di errore segnalato dall'OP. –

+0

l'errore è mancato in primo piano –

+2

sto dicendo che se un browser non supporta i moduli, non genererebbe quel messaggio affatto. Genererebbe un messaggio come "Importazione token inattesa". Pertanto, il problema dell'OP si trova altrove. –