Babel可以编译为"节点 - 和谐"而不是ES5?

时间:2015-06-24 05:58:34

标签: node.js babeljs ecmascript-7

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

是否可以针对节点和谐而不是ES5?我没有在选项中看到任何有希望的东西,但是选择目标似乎是能够使用编译器的标准事物。

更新

即使我使用的是stage: 1,黑名单上的regenerator transform似乎也没有效果。

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

2 个答案:

答案 0 :(得分:4)

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

{
  blacklist: [
    'es6.classes'
  ]
}
例如,

将停止转换ES6类并依赖于支持它们的平台。变换的主要列表是here

在这种情况下,

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

答案 1 :(得分:1)

奇怪的是,它似乎是在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;