在ES6中使用导入导出时,我得到以下错误:
SyntaxError:导出声明可能只出现在顶层
我冲浪找到如何解决这个问题,但我无法解决。任何人都可以解释一下。我是ES6的新手,特别是进口和出口。 (我完全使用StealJS来做这种事情) 谢谢!
js文件是:
app.js
import { cube, cubeRoot } from 'functions';
console.log(cube(4));
console.log(cubeRoot(125));
functions.js
// functions.js
function cube(a) {
return a * a * a;
}
function cubeRoot(a) {
return Math.cbrt(a);
}
export { cube, cubeRoot}
答案 0 :(得分:8)
2017年夏季更新:
请参阅http://caniuse.com/#search=modules,新支持,可能需要更改设置。
现在事情变得不那么模糊了。要使模块工作,您必须告诉浏览器它是一个模块(另一个是脚本)。第一种方式是隐式的,导入的模块总是一个模块。第二种方式是类型模块<script src="anymodule.js" type="module"></script>
确保导入和导出仅在顶层,而不是在块内,不在if语句内,不在循环内等。
同时确保提供完整路径(包括.js),它应以./
或../
开头。假设文件位于import { cube, cubeRoot } from './functions.js';
eval
对模块字符串不起作用。
以下过时的答案:
在撰写此答案时(04/2016),任何浏览器都不支持ES2015模块导入和导出语法。错误消息未命中,因为它意味着支持语法,但根本不支持。请参阅此处的第一个注释https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
原因是因为模块加载器的规范仍在进行中。见https://whatwg.github.io/loader/#status
然而,它们是polyfill或者像babel一样自动转换这种语法的工具。