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

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

当前回答

可能的答案

我有这个问题,在我的情况下发生的是,我缺乏添加扩展到文件 < <文件。ts > >

其他回答

我让模块工作了一段时间,然后它们没有出现这个Uncaught SyntaxError:意外的令牌导出错误。

结果是,我添加了一个开大括号而没有一个闭大括号。喜欢的东西:

if (true) {
/* } missing here */

export function foo() {}

虽然最大的错误是忘记了end},但解析器首先在大括号内找到一个导出,这是不允许的。

export关键字必须在文件的顶层。

So:

if (true) {
    export function foo() {}
}

也不合法。当解析器遇到这种情况时,它立即停止解析,模糊地宣布错误使用了export,并给出与加载使用export关键字的“非模块”JavaScript文件时相同的错误。它从不报告底层缺少大括号错误。

我花了很长时间才弄明白,所以我在这里发帖,以帮助未来的患者。

理想情况下,解析器将报告只允许在文件的顶层导出。

//✅使用模块。出口而不是出口 模块。出口= { 人, };

我的意见

出口

ES6

myClass.js

export class MyClass1 {
}
export class MyClass2 {
}

other.js

import { MyClass1, MyClass2 } from './myClass';

CommonJS替代

myClass.js

class MyClass1 {
}
class MyClass2 {
}
module.exports = { MyClass1, MyClass2 }
// or
// exports = { MyClass1, MyClass2 };

other.js

const { MyClass1, MyClass2 } = require('./myClass');

出口违约

ES6

myClass.js

export default class MyClass {
}

other.js

import MyClass from './myClass';

CommonJS替代

myClass.js

module.exports = class MyClass1 {
}

other.js

const MyClass = require('./myClass');

可能的答案

我有这个问题,在我的情况下发生的是,我缺乏添加扩展到文件 < <文件。ts > >

我通过制作一个入口点文件来解决这个问题。

// index.js
require = require('esm')(module)
module.exports = require('./app.js')

我在app.js内外导入的任何文件都可以使用导入/导出 现在你可以像node index.js一样运行它

注意:如果app.js使用export default,在使用入口点文件时,这将变成require('./app.js').default。