我正在尝试编译一个 Koa 应用程序,并且 Koa 具有检查以确保我将生成器函数作为中间件传递的断言。但是,我想使用 Babel 从 ES7 编译我的服务器端代码,以与前端代码保持一致。
是否有可能以 Node 和谐为目标,而不是 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
和/或 blacklist
选项,例如
{
blacklist: [
'es6.classes'
]
}
例如将停止转译 ES6 类并依赖于支持它们的平台。转换的主要列表是 here .
'regenerator'
在这种情况下会禁用转译生成器。但是,如果您禁用它,并且您正在使用异步函数,则您需要传递 optional: ['asyncToGenerator']
以启用将异步函数转换为具有包装函数的标准生成器,如否则它们最终会出现在最终输出中。
关于node.js - Babel 可以针对 "node --harmony"而不是 ES5 进行编译吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31018695/