巴贝尔可以编译为“node –harmony”而不是ES5吗?
我试图编译一个Koa应用程序,而Koa有断言来检查以确保我作为中间件传递了生成器函数。 不过,我想使用Babel来编译ES7的服务器端代码,以便与前端代码保持一致。
是否有可能针对节点和谐,而不是ES5? 在选项中我没有看到任何有希望的东西,但select一个目标似乎是一个标准的东西,可以用编译器来做。
更新
黑名单Babel的再生变换似乎没有效果,即使我正在使用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类,并依靠您的平台支持他们。 转换的主要列表在这里 。
在这种情况下, 'regenerator'
会禁用发电机组。 然而,如果你禁用了这个function,并且你正在使用asynchronous函数,那么你就需要传递optional: ['asyncToGenerator']
来启用将asynchronous函数转换为具有包装函数的标准生成器,否则它们会以最终的输出。
奇怪它似乎是从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;