浏览器中的 ES6 module:Uncaught SyntaxError: Unexpected token import

IT技术 javascript html ecmascript-6 module es6-modules
2021-01-24 02:33:12

我是ES6 (ECMAScript 6) 的新手,我想在浏览器中使用它的module系统我读到 Firefox 和 Chrome 支持 ES6,但使用时出现以下错误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;    

为什么?

5个回答

许多现代浏览器现在都支持 ES6 module。只要您使用<script type="module" src="...">导入脚本(包括应用程序的入口点),它就会起作用。

查看caniuse.com了解更多详情:https : //caniuse.com/#feat=es6-module

您可以在 Google Chrome Beta (61) / Chrome Canary 中试用 ES6 module。

Paul Irish 的 ToDo 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>

希望能帮助到你!

{ "message": "Uncaught SyntaxError: Unexpected token {", "filename": " stacksnippets.net/js ", "lineno": 24, "colno": 8 }
2021-03-22 02:33:12
@hoogw Stackoverflow 添加了自动运行代码片段。此代码不能按原样执行。您必须将代码复制到 index.html 和单独的 .js 文件,如上所示,然后在浏览器中尝试!
2021-03-23 02:33:12
感谢有用的回答。我为您删除了代码段运行程序。(正如我所见,StackOverflow 片段不能有多个js来源)。
2021-04-05 02:33:12
通过运行上面的代码片段,我得到了上述错误,使用 chrome v67,为什么?
2021-04-10 02:33:12
没错...我注意到的重要部分是<script type="module"></script>确保您添加了,否则您将收到该错误。我一直在不断地敲着我的头,<script>import ... </script>知道现在据说 chrome 支持没有标志的 ES6 module,然后我注意到需要 type 属性来向浏览器指定这是一个 ES6 module。
2021-04-13 02:33:12

不幸的是,现在许多浏览器都不支持module。

此功能目前才刚刚开始在浏览器中原生实现。它在许多转译器(例如 TypeScript 和 Babel)以及打包器(例如 Rollup 和 Webpack)中实现。

MDN 上找到

您必须将 type="module" 添加到您的脚本标记中。
2021-03-26 02:33:12
我读到这个功能是在 Sof 问题中实现的,但 MDN 源实际上更可靠。
2021-03-28 02:33:12
根据以下链接 Chrome 61 应该支持导入 - 它不支持。medium.com/dev-channel/…
2021-03-29 02:33:12

它对我有用,添加type="module"import我的 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>

见演示:https : //codepen.io/abernier/pen/wExQaa

可能是您将现有脚本更改为module而忘记删除原始脚本标记。这就是发生在我身上的事情以及我如何被定向到这个页面。我最初有这个:

<script src="app.js" defer></script>

然后我更改了我的主脚本标记以将其作为module导入并且它正在工作,但我仍然收到错误消息。我无法弄清楚它是如何工作并抛出错误的,但我忘记删除原始脚本标记。