ES6 module导入给出“Uncaught SyntaxError: Unexpected identifier”

IT技术 javascript html ecmascript-6 es6-modules
2021-02-15 18:26:15

对于个人项目,我尝试使用 ES6 导入来编写更清晰的代码。作为第一个测试,我正在编写一个应该生成菜单的对象。当我直接加载类时,整个代码都在工作,但是在 ES6 中使用导入和导出时,它会import在行中给出“未捕获的语法错误:意外的标识符”错误main.js

我有以下文件:

资产/js/menu.module.js

'use strict';

export default class Menu
{ ... }

资产/js/main.js

import Menu from "./menu.module.js";

window.addEventListener('DOMContentLoaded', () => {
    const menu = new Menu();
});

索引.html

<script type="module" src="assets/js/menu.module.js"></script>
<script src="assets/js/main.js">

请注意,这些只是相关的代码行。

是否使用这<script type="module">条线对我来说似乎没有任何区别。我确实启用了实验性和 ES6 module的 chrome 标志,因为没有它们,我收到了关于import未定义的错误

Chrome 版本为 62,因此根据不同的来源(包括谷歌的更新日志本身),即使没有标志,这也应该可以工作。

任何人都可以启发我为什么这不起作用,以及我做错了什么?

3个回答

正如@Bergi 在评论中提到的,添加type="module"main.jsHTML 中导入行解决了这个问题。现在一切正常。IE

<script type="module" src="assets/js/main.js">

感谢所有做出回应并试图提供帮助的人。

@TomRussell 哪条评论?因为我找不到它。我的问题是这type="module"件事。
2021-04-16 18:26:15
在哪里?哪个评论?解决办法是什么?
2021-04-18 18:26:15
@bernard @Pithikos 您还必须添加type='module'到主脚本中。这正是您留下评论的答案所描述的。这个:stackoverflow.com/a/47633417/4327948
2021-04-25 18:26:15
在之前的评论中,您说添加分号修复了它。现在你说添加类型修复它。
2021-04-26 18:26:15
在哪里添加type="module"文件?
2021-05-10 18:26:15

据我所知,您正在尝试加载文件,menu.module.js而它实际上名为menu.js.

PS:据我所知,您也可以.js从 import 语句中删除

我有类似的情况,但我使用 php 注入脚本。我只使用 vanilla javascript,我需要将“.js”扩展名放在我的导入中才能使其工作。我知道 React 不需要 .js 扩展名,但我猜这会根据您工作的环境而有所不同。希望这对其他人有帮助。
2021-04-27 18:26:15

您可以使用任何module捆绑器,其中一种简单灵活的解决方案是parcel 2,它现在是测试版,但您可以使用它。

 - npm i -D parcel@next
 - parcel index.html