Moduli ES6 nel browser: Errore di sintassi non rilevato: importazione di token imprevista


86

Sono nuovo su ES6 (ECMAScript 6) e mi piacerebbe utilizzare il suo sistema di moduli nel browser. Ho letto che ES6 è supportato da Firefox e Chrome, ma ricevo il seguente errore utilizzandoexport

Uncaught SyntaxError: Unexpected token import

Ho un file test.html

<html>
    <script src="test.js"></script>
<body>
</body>
</html>

e un file test.js

'use strict';

class Test {

    static hello() {
        console.log("hello world");
    } 
}

export Test;    

Perché?


I moduli ES6 non sono ancora supportati nel browser. Inoltre stai ancora caricando uno script, non un modulo.
Bergi

3
Continuo a non capire la differenza tra uno script e un modulo
cdarwin

Vedi qui
Bergi

20
La parte importante che ho notato è <script type="module"></script>assicurarti di aggiungerla altrimenti otterrai quell'errore. Sbattevo continuamente la testa contro il muro facendo <script>import ... </script>consapevolmente che ora si dice che chrome supporti i moduli ES6 senza flag, poi ho notato che l'attributo type era necessario per specificare al browser che si tratta di un modulo ES6, senza il quale lo ottieni esattamente errore.
Emmanuel Mahuni

1
Sto usando Chrome 68, vedo ancora questo errore quando usiamo import * from
Integration

Risposte:



53

Puoi provare i moduli ES6 in Google Chrome Beta (61) / Chrome Canary.

Implementazione di riferimento di ToDo MVC di Paul Irish - https://paulirish.github.io/es-modules-todomvc/

Ho una demo di base -

//app.js
import {sum} from './calc.js'

console.log(sum(2,3));
//calc.js
let sum = (a,b) => { return a + b; }

export {sum};
<html> 
    <head>
        <meta charset="utf-8" />
    </head>

    <body>
        <h1>ES6</h1>
        <script src="app.js" type="module"></script>
    </body>

</html>

Spero che sia d'aiuto!


33
Esatto ... La parte importante che ho notato è <script type="module"></script>assicurarti di aggiungerla altrimenti otterrai quell'errore. Sbattevo continuamente la testa contro il muro facendo <script>import ... </script>consapevolmente che ora si dice che chrome supporti i moduli ES6 senza flag, poi ho notato che l'attributo type era necessario per specificare al browser che si tratta di un modulo ES6.
Emmanuel Mahuni

1
{"message": "Uncaught SyntaxError: Unexpected token {", "filename": " stacksnippets.net/js ", "lineno": 24, "colno": 8}
hoogw

4
Ho ricevuto l'errore precedente eseguendo lo snippet di codice sopra, usa chrome v67, perché?
Hoogw

@hoogw Stackoverflow ha aggiunto lo snippet di codice Esegui automaticamente. Questo codice non può essere eseguito così com'è. Devi copiare il codice in index.html e separare i file .js come mostrato sopra e provare nel browser!
Roopesh Reddy

Grazie utile risposta. Ho rimosso lo snippet runner per te. (Come ho visto gli snippet StackOverflow non possono avere più di una jsfonte).
Mir-Ismaili

25

Sfortunatamente, i moduli non sono supportati da molti browser in questo momento.

Questa funzione sta appena iniziando ad essere implementata nei browser in modo nativo in questo momento. È implementato in molti transpiler, come TypeScript e Babel, e in bundle come Rollup e Webpack.

Trovato su MDN


Ho letto che questa funzione è stata implementata in una domanda Sof, ma la fonte MDN è effettivamente più affidabile.
cdarwin

Secondo il seguente link, Chrome 61 dovrebbe supportare l'importazione - non è così. medium.com/dev-channel/…
Marc

4
Devi aggiungere type = "module" al tuo tag script.
smohadjer

10

ha funzionato per me aggiungendotype="module" allo script importil mio mjs:

<script type="module">
import * as module from 'https://rawgit.com/abernier/7ce9df53ac9ec00419634ca3f9e3f772/raw/eec68248454e1343e111f464e666afd722a65fe2/mymod.mjs'

console.log(module.default()) // Prints: Hi from the default export!
</script>

Guarda la demo: https://codepen.io/abernier/pen/wExQaa

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.