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

时间:2017-04-26 17:37:50

标签: javascript plugins babeljs

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

Babel插件手册说'Do not traverse when manual lookup will do',解释说我可以简单地遍历子节点。这很好。我的问题是所有操作函数 - replaceWithinsertBeforeinsertAfter等 - 都是在路径上定义的,而不是在节点上定义的。所以,当我在子节点上进行迭代时,我该如何操作它们呢?

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

1 个答案:

答案 0 :(得分:7)

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

该部分尝试制作的一点是,您应该避免在path.traverse时调用path.get("foo"),因此对Program你可以做

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