如何让Babel输出一个文件's AST

How do I get Babel to output a file's AST?

本文关键字:文件 一个 AST Babel 输出      更新时间:2023-09-26

有没有办法让Babel将文件的AST输出为JSON或类似文件,而不是将其压缩回JS?

原因是我希望能够进行一些简单的静态分析/代码生成,虽然我的目标是最终在Babel插件(或类似插件)中进行,但我觉得如果我能从静态模型开始,它会大大简化事情。

有babylon,babel自己的解析器:

npm install -g babylon

babylon your_file.js > ast.json


节点API示例和来源:https://github.com/babel/babel/tree/master/packages/babylon

此外,babel插件手册可能会方便AST参考,并开始插件开发。

您应该检查ast源代码-它可以在构建树时使用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");