用Nodejs和google-traceur及co运行ES6代码

用Nodejs和google-traceur及co运行ES6代码

原文 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

5 回复

用Nodejs和google-traceur及co运行ES6代码

原文链接: http://forjs.org/book/lkaK8WuNme/section/eJxbCH-uOUe


推荐书籍


准备工作

首先,我们需要安装 traceurcothunkify。这些工具将帮助我们将ES6代码转换为ES5,并且让异步代码更易于管理。

npm install traceur
npm install co
npm install thunkify

创建src/test.js

在这个文件中,我们将定义一个简单的异步函数 add,并使用 thunkify 将其转换为可以被 co 使用的形式。

// 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 将 ES6 代码转换为 ES5 代码。

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 {};
});

运行代码

最后,我们通过以下命令来运行编译后的代码。

node run.js

其中 run.js 的内容如下:

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

运行结果

执行上述步骤后,你会看到以下输出:

4
4

这表明我们的代码已经成功地从ES6转换到ES5,并且通过 cothunkify 正确地处理了异步操作。


没看懂

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

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

为了使用Node.js、Google Traceur 和 co 运行 ES6 代码,我们需要完成以下步骤:

  1. 安装必要的依赖包
    • traceur 用于将 ES6 代码转译为 ES5。
    • co 用于处理生成器函数。
    • thunkify 将回调函数转换为生成器可以使用的函数。
npm install traceur co thunkify
  1. 编写源代码 (src/test.js):
var co = require("co");
var thunkify = require('thunkify');

// 定义一个异步函数
function add(a, b, cb) {
    setTimeout(function () {
        cb(null, a + b);
    }, 2000);
}

// 将 add 函数转换为 thunkify 可以处理的形式
var add2 = thunkify(add);

// 使用 co 运行生成器函数
co(function*() {
    var a = yield add2(1, 3);
    var b = yield add2(2, 2);
    console.log(a, b);
})();
  1. 转译 ES6 代码
traceur --dir src dest

这会将 src/test.js 中的 ES6 代码转译到 dest/test.js

  1. 运行转译后的代码
node run.js

其中 run.js 的内容如下:

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

解释

  • 我们使用 thunkify 将普通回调函数转换为生成器函数可以使用的形式。
  • co 用来运行生成器函数,并处理异步操作。
  • traceur 用于将 ES6 语法转换为 Node.js 可以执行的 ES5 语法。

这样,我们就可以在 Node.js 环境中运行 ES6 代码了。

回到顶部