브라우저의 ES6 모듈 : Uncaught SyntaxError : Unexpected token import


85

나는 새로운 해요 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 모듈 은 아직 브라우저에서 지원되지 않습니다. 또한 여전히 모듈이 아닌 스크립트를로드하고 있습니다.
Bergi

3
나는 여전히 스크립트와 모듈의 차이점을 이해하지 못합니다
cdarwin

참조 여기
BERGI

20
내가 주목하게 된 중요한 부분은 <script type="module"></script>추가하지 않으면 해당 오류가 발생한다는 것입니다. 나는 <script>import ... </script>크롬이 이제 플래그없이 ES6 모듈을 지원한다고 고의적으로 벽에 머리를 부딪 히고 있었는데, 브라우저에 이것이 ES6 모듈이라는 것을 지정하기 위해 type 속성이 필요하다는 것을 알았습니다. 오류.
엠마뉴엘 Mahuni

1
나는 우리가에서 수입 *를 사용할 때이 오류가 계속 참조, 크롬 68 사용하고 있습니다
통합

답변:


66

현재 많은 최신 브라우저가 ES6 모듈을 지원합니다. 스크립트 (응용 프로그램의 진입 점 포함)를 가져 오는 한이를 사용하여 <script type="module" src="...">작동합니다.

자세한 내용 은 caniuse.com 을 참조하십시오 : https://caniuse.com/#feat=es6-module


53

Chrome 베타 (61) / Chrome Canary에서 ES6 모듈을 사용해 볼 수 있습니다.

폴 아일랜드어로 할일 MVC의 참조 구현 - 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>크롬이 이제 플래그없이 ES6 모듈을 지원한다고 고의로 계속 벽에 머리를 부딪 히고 있었고, 브라우저에 이것이 ES6 모듈이라는 것을 지정하기 위해 type 속성이 필요하다는 것을 알았습니다.
엠마뉴엘 Mahuni

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

4
위의 코드 스 니펫을 실행하여 위의 오류가 발생했습니다. 크롬 v67을 사용하는 이유는 무엇입니까?
hoogw

@hoogw Stackoverflow는 자동으로 코드 조각 실행을 추가했습니다. 이 코드는있는 그대로 실행할 수 없습니다. 위와 같이 index.html에 코드를 복사하고 .js 파일을 분리 한 다음 브라우저에서 시도해야합니다!
Roopesh Reddy

유용한 답변 감사합니다. 당신을 위해 스 니펫 러너를 제거했습니다. (내가 보았 듯이 StackOverflow 스 니펫은 둘 이상의 js소스 를 가질 수 없습니다 ).
Mir-Ismaili

25

안타깝게도 현재 많은 브라우저에서 모듈을 지원하지 않습니다.

이 기능은 현재 브라우저에서 기본적으로 구현되기 시작했습니다. TypeScript 및 Babel과 같은 많은 트랜스 파일러와 Rollup 및 Webpack과 같은 번 들러에서 구현됩니다.

MDN 에서 발견


이 기능이 Sof 질문에서 구현되었다고 읽었지만 MDN 소스는 실제로 더 신뢰할 수 있습니다.
cdarwin

다음 링크에 따르면 Chrome 61은 가져 오기를 지원해야합니다. medium.com/dev-channel/…
Marc

4
스크립트 태그에 type = "module"을 추가해야합니다.
smohadjer

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.