提问者:小点点

ES2015模块导入导出语法错误


关于在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}

共1个答案

匿名用户

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一样自动地进行聚类填充或转换语法。