2017-08-14 134 views
1

我嘗試使用Facebook的再生器將ES6代碼轉換爲ES5代碼。 我需要轉換的代碼由React-ace編輯器生成,它是一個字符串。再生器不能識別字符串,只是簡單地返回它們。我試過使用eval()和new Function(),兩者都會在傳遞給regenerator.compile(「我需要編譯的任何代碼」)時被執行。代碼和返回的值只是返回值執行代碼的值。當代碼是字符串時,重新編譯Javascript ES6到ES5代碼

有沒有辦法將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

請參閱https://stackoverflow.com/help/mcve – guest271314

+1

再生器僅限con將生成器和異步函數轉換爲ES5,而不是其他任何ES6功能。 –

回答

0

只能以編程方式將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); 
+0

*「您只能通過AST以編程方式使用Regenerator,而不能使用字符串。」*您鏈接的文檔清楚地表明可以傳遞字符串。它在AST示例之前。 –