【问题标题】:Babel plugin: How to get the path for a given node?Babel 插件:如何获取给定节点的路径?
【发布时间】:2017-04-26 17:37:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript plugins babeljs


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-06
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      相关资源
      最近更新 更多