当代码是字符串时,重新编译Javascript ES6到ES5代码

时间:2017-08-14 04:15:40

标签: javascript ecmascript-6 ecmascript-5 file-conversion

我尝试使用facebook的Regenerator将ES6代码转换为ES5代码。 我需要转换的代码是由React-ace编辑器生成的,它是一个字符串。 Regenerator无法识别字符串,只是按原样返回它们。

我尝试使用eval()和新的Function(),这两个都将在传递给regenerator.compile(“我需要编译的代码”)时执行。代码,返回的值只是返回值已执行的代码。

有没有办法转换React-ace(或任何浏览器文本编辑器)生成的字符串并将其转换为ES5代码?是否有其他库允许您将ES6语法转换为ES5?

带有本地函数声明的工作示例:

let testFunction = (b) => {

  let a = (c) => {
    return c
  }

  return b;
}

let regenCode = require('regenerator').compile(testFunction).code;
console.log(regenCode);

这会产生:

function testFunction(b) {

   var a = function (c) {
     return c;
   } 

   return b;
}

尝试做:

let regenCode = require('regenerator').compile("let testFunction = (b) => { let a = (c) => { return c } return b; }");

但这只会让字符串回复给我

1 个答案:

答案 0 :(得分:0)

您只能使用AST以编程方式使用Regenerator,而不能使用字符串。

来自Regenerator documentation

  

AST转换:

var recast = require("recast");
var ast = recast.parse(es6Source);
ast = require("regenerator").transform(ast);
var es5Source = recast.print(ast);

在您的情况下,您必须执行以下操作:

var recast = require("recast");
var ast = recast.parse("let testFunction = (b) => { let a = (c) => { return c }; return b; }");
ast = require("regenerator").transform(ast);
var es5Source = recast.print(ast);
相关问题