【问题标题】:Babel Plugin: How to insert a sibling nodeBabel 插件:如何插入兄弟节点
【发布时间】:2019-08-03 13:04:15
【问题描述】:

似乎 path.insertAfter()、path.insertBefore()、path.unshiftContainer() 和 path.pushContainer() 仅适用于 Statements。如何插入不是语句的节点?

在我的例子中,我正在编写一个 babel jsx 插件,并且我正在尝试插入一个兄弟节点,它是一个 JSXExpressionContainer。当我这样做时,我收到以下错误:

TypeError: Property body[0] of BlockStatement expected node to be of a type ["Statement"] but instead got "JSXExpressionContainer"

我该如何解决这个问题?

【问题讨论】:

    标签: javascript plugins babeljs babel-plugin babel-babylon


    【解决方案1】:

    我通过将代码作为纯文本推送找到了一种解决方法。 React 似乎工作得很好。

    path.node.children.push('<div>Click me</div>')
    

    【讨论】:

      【解决方案2】:

      来自文档here

      FunctionDeclaration(path) {
        path.insertBefore(t.expressionStatement(t.stringLiteral("Because I'm easy come, easy go.")));
        path.insertAfter(t.expressionStatement(t.stringLiteral("A little high, little low.")));
      }
      

      查看您的错误,确保您的类型正确。只需检查 babel 类型here 并查看每种类型需要哪些参数。

      【讨论】:

      • 这不起作用。它给出了与问题相同的错误。我正在使用 babel7
      • 我认为这是您尝试插入的类型的错误,而不是 .insertBefore().insertAfter() 函数。试着插入一些更简单的东西。我有一个 babel 项目,我使用了 .insertAfter() 和一个节点,它可以工作。 @SouradeepNanda
      • 我正在尝试插入 JSX。
      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多