ブラウザのES6モジュール:Uncaught SyntaxError:予期しないトークンのインポート


86

私はへの新たなんだES6(ECMAScriptの6)、と私はその使用したいモジュールシステムをブラウザに。ES6はFirefoxとChromeでサポートされていると読みましたが、次のエラーが発生します。export

Uncaught SyntaxError: Unexpected token import

test.htmlファイルがあります

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

およびtest.jsファイル

'use strict';

class Test {

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

export Test;    

どうして?


ES6モジュールは、ブラウザではまだサポートされていません。また、モジュールではなく、スクリプトをロードしています。
ベルギ2017年

3
スクリプトとモジュールの違いがまだわかりません
cdarwin 2017年

こちらをご覧ください
ベルギ2017年

20
私が気付いた重要な部分は<script type="module"></script>、必ず追加することです。そうしないと、エラーが発生します。<script>import ... </script>ChromeがフラグなしのES6モジュールをサポートすると言われていることを知って、壁に頭をぶつけていました。ブラウザにこれがES6モジュールであることを指定するには、type属性が必要であることに気付きました。これがないと、正確にわかりません。エラー。
エマニュエルマフニ2017

1
Chrome 68を使用していますが、import * fromを使用すると、このエラーが引き続き表示されます
Integration

回答:


66

最近の多くのブラウザはES6モジュールをサポートするようになりました。スクリプト(アプリケーションへのエントリポイントを含む)をインポートする限り、<script type="module" src="...">それを使用して機能します。

詳細については、caniuse.comをご覧ください:https//caniuse.com/#feat=es6-module


53

ES6モジュールはGoogleChrome Beta(61)/ ChromeCanaryで試すことができます。

PaulIrishによるToDoMVCのリファレンス実装-https ://paulirish.github.io/es-modules-todomvc/

私は基本的なデモをしました-

//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>

それが役に立てば幸い!


33
そうです...私が気付いた重要な部分は<script type="module"></script>、必ず追加することです。そうしないと、エラーが発生します。<script>import ... </script>ChromeがフラグなしのES6モジュールをサポートすると言われていることを知りながら、壁に頭をぶつけていました。ブラウザにこれがES6モジュールであることを指定するには、type属性が必要であることに気付きました。
エマニュエルマフニ2017

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

4
上記のコードスニペットを実行して上記のエラーが発生しました。Chromev67を使用します。なぜですか?
hoogw 2018

@hoogw Stackoverflowは、コードスニペットを自動的に実行することを追加しました。このコードをそのまま実行することはできません。上記のように、コードをindex.htmlにコピーし、.jsファイルを分離して、ブラウザーで試してみる必要があります。
Roopesh Reddy 2018

有用な答えをありがとう。スニペットランナーを削除しました。(私が見たように、StackOverflowスニペットは複数のjsソースを持つことはできません)。
ミール・イスマーイール

25

残念ながら、モジュールは現在多くのブラウザでサポートされていません。

この機能は、現時点ではブラウザにネイティブに実装され始めたばかりです。TypeScriptやBabelなどの多くのトランスパイラー、およびRollupやWebpackなどのバンドラーに実装されています。

MDNで見つかりました


この機能はSofの質問で実装されていると読みましたが、実際にはMDNソースの方が信頼性が高くなっています。
cdarwin 2017年

次のリンクによると、Chrome61はインポートをサポートする必要があります-サポートしていません。medium.com/dev-channel/…–
Marc

4
スクリプトタグにtype = "module"を追加する必要があります。
smohadjer 2018

10

それは私のmjsをスクリプトに追加type="module"するために私のために働きましたimport

<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>

デモを参照してください:https//codepen.io/abernier/pen/wExQaa

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.