Babel 可以为 "node --harmony" 而不是 ES5 编译吗?

Can Babel compile for "node --harmony" instead of ES5?

我正在尝试编译一个 Koa 应用程序,并且 Koa 有断言来检查以确保我将生成器函数作为中间件传递。但是,我想使用 Babel 从 ES7 编译我的服务器端代码,以与前端代码保持一致。

是否可以针对 node harmony 而不是 ES5?我在选项中看不到任何有前途的东西,但选择目标似乎是编译器能够做的标准事情。

更新

黑名单 Babel 的 regenerator transform 似乎没有效果,即使我正在使用 stage: 1

index.js:

require( "babel/register" )({
    sourceMaps: "inline",
    stage: 1,
    blacklist: [ "regenerator" ],
    optional: [ "asyncToGenerator" ]
});

var app = require( "./src/server" );

app.listen( process.env.port || 3000 );

src/server.js:

import koa from "koa";
import router from "koa-router";

router.get( "/", function *( next ) {
    this.body = "Hi!";
});

let app = koa();
app.use( router() );

export default app;

执行:node --harmony index.js

node --version
v0.12.4

--harmony 并没有真正的标准定义,因为它取决于您碰巧使用的 Node 或 iojs 版本。你能用 Babel 做的最好的事情就是明确决定对 运行 的转换。 Babel 允许你提供 whitelist and/or blacklist 选项,例如

{
  blacklist: [
    'es6.classes'
  ]
}

例如,将停止转译 ES6 类 并依赖您的平台支持它们。转换的主要列表是 here.

'regenerator' 在这种情况下会禁用转译生成器。但是,如果您禁用它,并且您正在使用异步函数,那么您需要传递 optional: ['asyncToGenerator'] 以启用将异步函数转换为具有包装函数的标准生成器,否则它们将在最终输出。

奇怪,它似乎在 CLI 中运行(server.js 中有一些小改动)

babel-node --blacklist regenerator --harmony server.js

server.js的代码:

import koa from "koa";
import router from "koa-router";

const Router = router();

Router.get( "/", function *( next ) {
    this.body = "Hi foo!";
});

let app = koa();
app.use( Router.routes() );

export default app;