gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:02:26 26 4
gpt4 key购买 nike

我可以加载一个文件并用 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)
};

Source example

但是我不知道如何在不直接加载的情况下从多个文件中获取 AST。我尝试编写一个 babel 插件来分析导入文件中的代码,但我还没有意识到该怎么做。

关于babeljs - 如何在多个文件上运行 babel 的 babylon.parse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54827900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com