Babel插件:如何获取给定节点的路径?

Dan*_*olf 3 javascript plugins babeljs

我正在编写一个Babel插件,需要操作代码文件中的每个顶级声明,即直接在Program节点下面的每个声明.

Babel插件手册说"手动查找时不要遍历",解释说我可以简单地遍历子节点.这很好.我的问题是,所有的操作功能- ,,replaceWith 等-被定义的路径,而不是节点.所以,当我在子节点上进行迭代时,我该如何操作它们呢?insertBeforeinsertAfter

在我看来,我需要一些从给定节点获取路径对象的方法.但我只能找到相反案例的文档:从路径对象(path.node)获取节点.

log*_*yth 7

您无法从节点获取路径,因为节点不知道它在AST中的位置.

这部分是试图说明的一点是,你应该避免调用path.traverse时,你可以这样做path.get("foo"),所以Program你可以做

Program(path) {
  path.get("body").forEach((child) => {
    // "child" here is a NodePath
  });
},
Run Code Online (Sandbox Code Playgroud)