我可以加载一个文件并用 babel 遍历它,它是这样的:
var babylon = require("babylon");
let contents = fs.readFileSync("example.js","utf-8");
let ast = babylon.parse(contents);
现在的问题是,如果我的程序中有多个文件,我如何获得 AST(抽象语法树)。
main.js
export const getFoo(){
return "a"
}
example.js
import {getFoo} from './main'
let bar = getFoo() + "baz";
显然我希望将函数声明和函数调用表达式放入同一个 AST 中,同时获取行号和列 (node.loc) 信息以也显示特定文件。
最佳答案
如果您知道多个文件的路径并且可以加载它们,则可以连接多个文件的 AST。
import {parse} from '@babel/parser';
const a = 'var a = 1;'; // or fs.readFileSync("a.js","utf-8");
const b = 'var b = 2;'; // or fs.readFileSync("b.js","utf-8");
const astA = parse(a, { sourceFilename: 'a.js' });
const astB = parse(b, { sourceFilename: 'b.js' });
const ast = {
type: 'Program',
body: [].concat(astA.program.body, astB.program.body)
};
但是我不知道如何在不直接加载的情况下从多个文件中获取 AST。我尝试编写一个 babel 插件来分析导入文件中的代码,但我还没有意识到该怎么做。
关于babeljs - 如何在多个文件上运行 babel 的 babylon.parse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54827900/