关于在ES6中使用导入导出,我得到以下错误:
SyntaxError:导出声明只能出现在顶层
我上网找办法解决这个问题,但我做不到。谁能解释一下。我是ES6的新手,特别是导入和导出。(我使用StealJS完全是为了这种东西)谢谢!
js文件有:
应用程序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}
2017年夏季更新:
请参阅http://caniuse.com/#search=modules,新支持,可能需要更改设置。
现在事情已经不那么模糊了。要使一个模块工作,您必须告诉浏览器它是一个模块(另一个是脚本)。第一种方式是隐式的,导入的模块总是一个模块。第二种方法是使用类型module
确保导入和导出仅在顶层,不在块内,不在if语句内,不在循环内,等等。
还要确保提供完整路径(包括.js),它应该以./
或../
开头。由于文件在同一文件夹中,因此从“./functions.js”导入{cube,cubeRoot};
模块字符串上的eval
将不起作用。
以下是过时的答案:
在我写这个答案的时候(04/2016)任何浏览器都不支持ES2015模块的导入和导出语法。错误消息是miss leading,因为它暗示语法受支持,但根本不受支持。请参阅此处的第一条注释https://developer.mozilla.org/en-us/docs/web/javascript/reference/statements/import
原因是因为模块加载器的规范还在进行中。参见https://whatwg.github.io/loader/#状态
然而,它们是一种工具,可以像babel一样自动地进行聚类填充或转换语法。