如何在遍历过程中从 Babel 节点获取字符串形式的代码

Ska*_*Ska 3 javascript traversal abstract-syntax-tree babeljs

在下面的代码中,是否可以获得 AST 节点的整个字符串表示形式,在这种情况下会返回window.alert('asdf')

const ast = parse("window.alert('asdf')")

let preloadCode = ""
traverse(ast, {
  CallExpression: function(path) {
    // path.node.toString() ??
  },
})
Run Code Online (Sandbox Code Playgroud)

fut*_*pib 6

返回的每个 AST 节点@babel/parser都有一个startend属性,指向它在源代码中的位置。您可以使用它们来对原始字符串的源进行切片。

\n
const { parse } = require(\'@babel/parser\');\n\nconst source = \'1 + 2 + 3\';\nconst ast = parse(source);\nconst node = ast.program.body[0].expression.left;\n\nconsole.log(source.slice(node.start, node.end)); // \xe2\x86\x92 \'1 + 2\'\n
Run Code Online (Sandbox Code Playgroud)\n