获取意外的令牌导出

2022-08-29 23:20:01

我正在尝试在我的项目中运行一些ES6代码,但我收到一个意外的令牌导出错误。

export class MyClass {
  constructor() {
    console.log("es6");
  }
}

答案 1

2022年更新

您使用的是 ES6 模块语法。

这意味着您的环境(例如节点 v14.13.0 或更高版本)必须支持 ESM(Ecmascript 模块语法)。

自 v14.13.0 起的 NodeJS 支持 EcmaScript 模块语法,但必须通过将属性添加到 启用它。v14.13.0 之前的 NodeJS 版本默认使用 CommonJS 模块语法 (),而不是 ES6 模块语法 ( 关键字)。"type":"module"package.jsonmodule.exportsexport

解决 方案:

  • 如上文所述启用模块支持,如果package.json
  • 使用 CommonJS 语法重构(适用于旧版本的 NodeJS)
  • 考虑使用 TypeScript 并将文件与 npm 包一起写入.tsts-nodets-node-dev
  • (已弃用)使用 npm 包将 ES6 转译到目标babelcommonjs

Javascript Module标准近年来发生了很大变化,所以可能会有点令人困惑。


答案 2

如果您遇到此错误,也可能与您如何将JavaScript文件包含在html页面中有关。加载模块时,必须显式声明这些文件。下面是一个示例:

//module.js:
function foo(){
   return "foo";
}

var bar = "bar";

export { foo, bar };

当您包含如下脚本时:

<script src="module.js"></script>

您将收到以下错误:

未捕获的语法错误:意外的令牌导出

您需要包含 type 属性设置为 “module” 的文件:

<script type="module" src="module.js"></script>

然后它应该按预期工作,并且您已准备好在另一个模块中导入模块:

import { foo, bar } from  "./module.js";

console.log( foo() );
console.log( bar );