ES2015模块导入和导出语法错误

Vin*_*ino 13 javascript ecmascript-6

在ES6中使用导入导出时,我收到以下错误:

SyntaxError:export声明只能出现在顶层

我冲浪找到如何解决这个问题,但我无法解决.任何人都可以解释一下.我是ES6的新手,特别是进口和出口.(我完全使用StealJS来做这种事情)谢谢!

js文件是:

app.js

import { cube, cubeRoot } from 'functions';

console.log(cube(4));
console.log(cubeRoot(125));
Run Code Online (Sandbox Code Playgroud)

functions.js

// functions.js

function cube(a) {
    return a * a * a;
}

function cubeRoot(a) {
    return Math.cbrt(a);
}

export { cube, cubeRoot}
Run Code Online (Sandbox Code Playgroud)

Wal*_*ril 9

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一样自动转换这种语法的工具.

  • 我是说如果浏览器不支持模块,它根本不会生成该消息.它会生成一条消息,例如"Unexpected token import".因此,OP的问题在于其他地方. (2认同)