Babel NodeJS ES6:语法错误:意外的标记导出。

12

我希望你能够翻译一个关于使用babel编译NodeJS程序的问题。我的程序包含ES6语法和Colyseus库的导出,但是当我运行以下命令时:

babel-node server.js

出现以下错误信息:

export class MyRoom extends colyseus.Room {
^^^^^^

SyntaxError: Unexpected token export

以下是我的 package.json 文件:

{
  "name": "app",
  "version": "1.0.0",
  "description": "a description",
  "main": "server.js",
  "scripts": {
    "test": "babel-node server.js",
    "build": "babel-node server.js"
  },
  "author": "henryzhu",
  "license": "ISC",
  "dependencies": {
    "actionhero": "^19.1.2",
    "colyseus": "^0.9.33",
    "easytimer.js": "^2.3.0",
    "express": "^4.16.3",
    "socket.io": "^2.1.0",
    "socketio": "^1.0.0",
    "uniqid": "^5.0.3"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.7.0",
    "babel-preset-es2015": "^6.24.1"
  }
}

以下是我的 server.js 文件:

var colyseus = require("colyseus");
var http = require("http");
var express = require("express");
var port = process.env.port || 3000;

var app = express();

app.use(express.static("public", { dotfiles: 'allow' }));

var gameServer = new colyseus.Server({
  server: http.createServer(app)
});

export class MyRoom extends colyseus.Room {
    // When room is initialized
    onInit (options) { }

}

gameServer.listen(port);

你的 Babel 配置是什么样子的? - miyu
3个回答

3
添加一个配置文件 (.babel.config.js),内容如下:
module.exports = {
    presets: [
        '@babel/preset-env'
    ]
};

然后运行:

babel-node --config-file .babel.config.js server.js


8
似乎这并不适用于"@babel/cli": "^7.2.3", "@babel/core": "^7.4.0", "@babel/node": "^7.2.2", "@babel/preset-env": "^7.0.0"。我总是不能理解为什么有这么多方法可以做一个简单的事情,比如在JS中转换代码。 - cglacet
@cglacet,这是Babel的另一个主要版本,你有查看过他们关于此的文档吗?我猜测CLI标志在版本之间发生了变化。 - ryanpcmcquen
4
我想我找到了问题所在。如果您的配置文件位于 root/ 目录下,并调用位于 root/folderA 的脚本,而该脚本从 root/folderB 导入了某些内容,则来自 folderBjs 文件似乎无法正确转译(被忽略?)。对我来说这看起来像是一个错误,但也许我不理解配置文件的职责(我曾认为它是“项目配置”,但显然这不是它应该被理解的方式)。 - cglacet
@cglacet,我很高兴你认为JS转译是“一件简单的事情”。此时,整个社区都在等待您编写自己的个人转译器。我非常好奇看到它运作的样子。 - Luca Fagioli

1

babel-node可能期望使用Node风格的模块语法:

module.exports = ...

使用ES6风格的替代方法:

export class ...

编辑:

你可以通过以下方式指定一个 .babelrc 文件来修复它:

{
    "presets": ["env"]
}

使用安装了babel-preset-env包的程序


0

对我来说,添加一个配置文件(babel.config.js)是有效的。此外,顺序很重要。预设应该在所有插件之前。

module.exports = {
     presets: [['@babel/preset-env',{targets: {node: 
        'current',},loose:true,},],],
     plugins: [
        '@babel/plugin-syntax-dynamic-import',
        '@babel/plugin-syntax-import-meta',
        [
        '@babel/plugin-transform-runtime',
        {
           useESModules: true,
        },
     ],
    ],
  };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接