作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以加载一个文件并用 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/
我是一名优秀的程序员,十分优秀!