“导入”意外令牌? (chrome 62)

时间:2017-11-08 14:19:52

标签: javascript google-chrome

在尝试解决为什么systemjs找不到我安装的自定义库时(可能是一个跟进问题),当我尝试“手动”做事时,我陷入困境。

所以我有一个由3个文件组成的简单系统:

  • 的index.html
  • hi.js
  • hi2.js

索引只是:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Test</title>
</head>

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

hi.js:

import * as hi from "hi2.js";

hi.myFunction();

hi2.js:

function myFunction() {
  alert('hi')
}
export { myFunction };

现在当我运行(使用webstorm和chrome 62)代码时,我得到以下错误,由(chrome)调试器报告: “未捕获的SyntaxError:意外的令牌导入”

这里发生了什么?我检查了javascript兼容性on mdn,它告诉我chrome 61和更新版本支持import。 - 我用chrome 62来测试它。

那是怎么回事,以及如何让它发挥作用?

recomendation我还将html行更改为<script type="module" src="hi.js"></script>。这根本没有帮助,同样的错误。

1 个答案:

答案 0 :(得分:15)

您的脚本标记需要type="module",这是正确的:

<script src="hi.js" type="module"></script>
<!-- ---------------^^^^^^^^^^^^^       -->

您还需要在模块说明符上添加./前缀:

import * as hi from "./hi2.js";
// ------------------^^

这就是为一个没有路径的说明者敞开大门,在某些阶段随着事物的发展而具有特殊意义。来自the WHAT-WG spec

  

此限制(相对网址说明符必须以/./../ - TJ)开头,以便将来使用我们可以允许自定义模块加载器为“裸”导入说明符赋予特殊含义,例如import "jquery"import "web/crypto"。目前,任何此类导入都将失败,而不是被视为相对URL。

当我对您的文件进行这两项更改时,如果Chrome 62未设置实验标记,则会收到警报。