当代码为字符串时,将Javascript ES6代码重新编译为ES5代码

Recompiling Javascript ES6 to ES5 code when the code is a string

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

我尝试使用 eval() 和 new Function(),这两个函数都会在传递给 regenerator.compile("whatever code I need to compile").code 时执行,并且值 returned将只是执行代码的 return 值。

有没有办法将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; }");

但这只会把字符串还给我

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

来自Regenerator documentation

AST transformation:

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