首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多个文件上运行babel的babylon.parse

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

Stack Overflow用户
提问于 2019-02-22 13:09:52
回答 1查看 325关注 0票数 3

我可以加载一个文件并使用babel遍历它,它可以这样做:

代码语言:javascript
复制
var babylon = require("babylon");
let contents = fs.readFileSync("example.js","utf-8");
let ast = babylon.parse(contents);

现在的问题是,如果我的程序中有多个文件,我如何获得AST (抽象语法树)。

main.js

代码语言:javascript
复制
export const getFoo(){
  return "a"
}

example.js

代码语言:javascript
复制
import {getFoo} from './main'
let bar = getFoo() + "baz";

显然,我希望看到函数声明和函数调用表达式进入同一个AST,但同时也希望获得行号和列(node.loc)信息来显示特定的文件。

EN

回答 1

Stack Overflow用户

发布于 2020-03-02 09:19:48

如果您知道AST的路径并能够加载它们,您可以从多个文件连接AST。

代码语言:javascript
复制
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插件来分析导入文件中的代码,但我还没有意识到如何做到这一点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54827900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档