如何在多个文件上运行babel的babylon.parse

问题描述 投票:1回答:1

我可以加载一个文件并使用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)信息以显示特定文件。

babeljs babel
1个回答
0
投票

如果您知道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)
};

Source example

但是我无法找出如何直接从多个文件中获取AST的方法。我试图编写一个babel插件来分析导入文件中的代码,但我还没有意识到该怎么做。

© www.soinside.com 2019 - 2024. All rights reserved.