babeljs - Babel,使用 path.replaceWith 时超出了最大调用堆栈大小

标签 babeljs babylonjs stack-size

我试图玩 babel 模块,babylon , babel-traverse .当我尝试替换节点时,程序崩溃了 Maximum call stack size exceeded .这是我的代码

import * as babylon from 'babylon'
import traverse from 'babel-traverse'
import generate from 'babel-generator'
import * as t from 'babel-types'


const code = `
import a from 'b'
n === 3
`
const ast = babylon.parse(code, {
  sourceType: 'module'
})

const visitor = {
  BinaryExpression(path) {
    console.log((path.node))
    path.replaceWith(t.binaryExpression('**', t.numericLiteral(3), t.numericLiteral(4)))
  }
}

traverse(ast, visitor)

let generated = generate(ast, null, code)
console.log(generated.code)

我正在使用下面的 babel 依赖项,知道吗?
"dependencies": {
"babel-generator": "^6.9.0",
"babel-preset-es2015": "^6.9.0",
"babel-traverse": "^6.9.0",
"babel-types": "^6.9.1",
"babylon": "^6.8.0"
}

最佳答案

您收到堆栈错误的原因是您的二进制表达式替换会生成另一个二进制表达式。您的替换二进制表达式会一遍又一遍地输入访问者,无止境。

要打破无限循环,您需要检查您的替换是否已经发生,可能忽略 replaceWith每当你看到操作符是 ** .

关于babeljs - Babel,使用 path.replaceWith 时超出了最大调用堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37539432/

相关文章:

javascript - 如何调用继承类中的基方法?

glsl - 使用GLSL在平面上渲染平滑的引用网格

javascript - 通过 babel 运行 React Native es6 javascript

reactjs - 未捕获的类型错误 : Cannot assign to read only property '' of object '#<Object>'

JavaScript 构造函数属性无法识别 - Babylon.js

glsl - Babylon JS 和 GLSL 中的 SSAO 实现,使用 View 光线进行深度比较

Python threading.stack_size() 无效

c# - 如何更改控制台应用程序的堆栈大小?

c++ - 当 DLL 需要比主 exe 应用程序更大的堆栈大小时怎么办?

javascript - 使用 Nodemon 在 Node.js v6.2.0 上安装 Babel V6.x ES7 Async/Await