有沒有一種方法可以讓Babel將文件的AST輸出爲JSON或類似格式,而不是將它壓縮回JS?如何讓Babel輸出文件的AST?
原因是我希望能夠做一些簡單的靜態分析/代碼生成,而我的目標是最終在一個Babel(或類似的)插件中執行它,我覺得它會顯着簡化事情,如果我可以從一個靜態模型開始。
有沒有一種方法可以讓Babel將文件的AST輸出爲JSON或類似格式,而不是將它壓縮回JS?如何讓Babel輸出文件的AST?
原因是我希望能夠做一些簡單的靜態分析/代碼生成,而我的目標是最終在一個Babel(或類似的)插件中執行它,我覺得它會顯着簡化事情,如果我可以從一個靜態模型開始。
有babylon,巴貝爾自己的解析器:
npm install -g babylon
babylon your_file.js > ast.json
節點API例子和來源: https://github.com/babel/babel/tree/master/packages/babylon
此外,babel plugin handbook可能會用於AST參考,並開始使用插件開發。
這就是*我一直在尋找的東西! – Sophistifunk
您應該檢出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");
我會看看這個,歡呼聲。 – Sophistifunk
你只是想解析代碼,還是想要應用Babel的轉換?那裏有不少JS解析器。巴別利用自己的橡果叉,稱爲巴比倫。看看http://astexplorer.net/,它具有流行的解析器(注意:我維護該站點)。它實際上也允許你創建Babel插件的原型(但不是用於Babel v6)。 –
具體而言,我希望能夠運行Babel的* parser *插件,因此輸出可以包含(例如)流注釋數據。我希望輸出在它轉換成普通的ES3/5樹之前。 – Sophistifunk