我可以加载一个文件并使用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)信息来显示特定的文件。
发布于 2020-03-02 09:19:48
如果您知道AST的路径并能够加载它们,您可以从多个文件连接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插件来分析导入文件中的代码,但我还没有意识到如何做到这一点。
https://stackoverflow.com/questions/54827900
复制相似问题