1

我试图使用 acorn.js 和 yeoman 将代码添加到现有的 js 文件中。我尝试使用 esprima 和 acorn 来完成这项工作,但我找不到任何关于将节点添加到 AST 的文档。

4

3 回答 3

1

(晚了三年,但这是答案)

您首先需要了解,您不会简单地将新节点添加到 AST 树的任何地方。由于您表示要向 js 文件添加代码,因此您需要将其添加到带有body. 操作的body方式与处理数组的方式相同(以橡子为例)。以下是如何将节点添加到节点的示例FunctionDeclaration

// astNode is a FunctionDeclaration node with a body that contains more nodes
// newNode is the code you want to insert
astNode.body.push(newNode); // add node at the end of the function block
astNode.body.unshift(newNode); // add node at the beginning of the function block
astNode.body.splice(index, 0, newNode); // add node at index
于 2021-05-09T23:41:02.600 回答
-1

我发现有用的是将 estraverse 与橡子一起使用。您可以使用 acorn 将 JS 文件转换为 AST,然后根据 ECMAscript 使用 estraverse 轻松添加或替换节点。

您需要寻找的是 estraverse.replace(..) API。

于 2019-12-26T17:56:29.940 回答
-3

我相信这就是您正在寻找的东西https://github.com/SBoudrias/ast-query

于 2018-04-15T02:18:02.003 回答