2015-11-17 39 views
1

有沒有一種方法可以讓Babel將文件的AST輸出爲JSON或類似格式,而不是將它壓縮回JS?如何讓Babel輸出文件的AST?

原因是我希望能夠做一些簡單的靜態分析/代碼生成,而我的目標是最終在一個Babel(或類似的)插件中執行它,我覺得它會顯着簡化事情,如果我可以從一個靜態模型開始。

+1

你只是想解析代碼,還是想要應用Babel的轉換?那裏有不少JS解析器。巴別利用自己的橡果叉,稱爲巴比倫。看看http://astexplorer.net/,它具有流行的解析器(注意:我維護該站點)。它實際上也允許你創建Babel插件的原型(但不是用於Babel v6)。 –

+0

具體而言,我希望能夠運行Babel的* parser *插件,因此輸出可以包含(例如)流注釋數據。我希望輸出在它轉換成普通的ES3/5樹之前。 – Sophistifunk

回答

2

您應該檢出ast-source - 構建樹時,可能需要babel作爲解析器。從他們的npmjs頁

例子:

import ASTSource from "ast-source" 
import estraverse from "estraverse" 
import fs from "fs" 

function transform(AST) { 
    var replaced = { 
     "type": "babel", 
     "value": 42, 
     "raw": "42" 
    }; 
    return estraverse.replace(AST, { 
     enter: function (node) { 
      if (node.type === estraverse.Syntax.Literal) { 
       return replaced; 
      } 
     } 
    }); 
} 

var source = new ASTSource(fs.readFileSync("./input.js", "utf-8"), { 
    filePath: "./input.js" 
}); 
var output = source.transform(transform).output(); 
console.log(output.code);// => "var a = 42;" 
console.dir(output.map.toString()); // => source map 
fs.writeFileSync("./output.js", output.codeWithMap, "utf-8"); 
+0

我會看看這個,歡呼聲。 – Sophistifunk