用google-traceur和co运行ES6代码
发布于 10 年前 作者 leogiese 5971 次浏览 最后一次编辑是 8 年前 来自 分享

原文 http://forjs.org/book/lkaK8WuNme/section/eJxbCH-uOUe 用google-traceur和co运行ES6代码 ====

推荐:《精通Node.js开发》 《Angular.js视频详解》

准备工作

首先安装 traceur 用于转换

npm install traceur

然后安装 co

npm install co

还需要安装thunkify,用于把回调方式的函数,转换成 co 能认得的函数。

npm install thunkify

创建src/test.js

var co = require("co");
var thunkify = require('thunkify');

function add(a,b,cb){
    setTimeout(function (){
        cb(null,a+b);
    },2000);
}

var add2 = thunkify(add);

co(function *(){
    var a = yield add2(1,3);
    var b = yield add2(2,2);
    console.log(a,b);
})();

编译

traceur --dir src dest

编译后的es5代码

$traceurRuntime.ModuleStore.getAnonymousModule(function() {
  "use strict";
  var co = require("co");
  var thunkify = require('thunkify');
  function add(a, b, cb) {
    setTimeout(function() {
      cb(null, a + b);
    }, 2000);
  }
  var add2 = thunkify(add);
  co($traceurRuntime.initGeneratorFunction(function $__0() {
    var a,
        b;
    return $traceurRuntime.createGeneratorInstance(function($ctx) {
      while (true)
        switch ($ctx.state) {
          case 0:
            $ctx.state = 2;
            return add2(1, 3);
          case 2:
            a = $ctx.sent;
            $ctx.state = 4;
            break;
          case 4:
            $ctx.state = 6;
            return add2(2, 2);
          case 6:
            b = $ctx.sent;
            $ctx.state = 8;
            break;
          case 8:
            console.log(a, b);
            $ctx.state = -2;
            break;
          default:
            return $ctx.end();
        }
    }, $__0, this);
  }))();
  return {};
});

运行代码run.js

require("traceur");
require("./dest/test");

运行结果

4
4
4 回复

co库你搜索一下 github就有了,是tj开发的。

    • 为啥不直接用node 0.11运行呢

@TossShinHwa 也可以,这里主要说明了编译成 es5 后也可以使用 co 库。node0.11 的 harmony 参数后,也不完全支持 es6 ,traceur 支持es6,可以写其他 es6写法

回到顶部