当代码为字符串时,将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 一起使用,而不能与字符串一起使用。
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);
我尝试使用 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 一起使用,而不能与字符串一起使用。
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);