【问题标题】:Recompiling Javascript ES6 to ES5 code when the code is a string当代码是字符串时,将 Javascript ES6 重新编译为 ES5 代码
【发布时间】:2018-01-21 20:54:52
【问题描述】:

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

我尝试使用eval()和new Function(),这两个函数都会在传入regenerator.compile("whatever code I need to compile").code时执行,返回的值就是返回值执行的代码。

有没有办法将 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 仅将生成器和异步函数转换为 ES5,而不是任何其他 ES6 功能。
  • 为第一次没有共享代码道歉,这是我关于堆栈溢出的第一个问题

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


【解决方案1】:

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

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

【讨论】:

  • “您只能以编程方式将 Regenerator 与 AST 一起使用,而不能与字符串一起使用。” 您链接到的文档清楚地表明可以传递字符串。它在 AST 示例之前。
猜你喜欢
  • 2021-09-07
  • 1970-01-01
  • 2012-08-09
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多