在尝试解决为什么systemjs找不到我安装的自定义库时(可能是一个跟进问题),当我尝试“手动”做事时,我陷入困境。
所以我有一个由3个文件组成的简单系统:
索引只是:
<!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>
。这根本没有帮助,同样的错误。
答案 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未设置实验标记,则会收到警报。