gpt4 book ai didi

node.js - Babel 插件中的 "Visitor.Program.enter()"和 "pre()"有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:39 25 4
gpt4 key购买 nike

这个 Babel 插件:

module.exports = function(){
return {
visitor:{
Program:{
enter(){ console.log('Enter') },
exit(){ console.log('Exit') }
}
},
pre(){ console.log('Pre') },
post(){ console.log('Post') }
}
}

为任何 javascript 文件生成此输出:

Pre
Enter
Exit
Post

pre()Program.enter() 之前调用,post()Program.exit() 之后调用.

如果我想在 AST 遍历的开始/结束时运行一些代码,是否有任何理由我应该将该代码放入 pre/post 而不是 Program.enter/Program.exit?

有什么区别吗?

最佳答案

据我所知,没有什么区别。两者都在语法树完全遍历之前/之后调用。

唯一的区别是传递给 Program.enter/Program.exit 的参数与传递给 pre/的参数不同发布

module.exports = function(){
return {
visitor:{
Program:{
enter(path, state){
//path.node
//path.parent
//state.opts
},
}
},
pre(state){
//state.scope
//state.scope.globals
//state.scope.plugins
},
}
}

例如,从 Program.enter() 您可以使用插件选项访问 state.opts,而从 pre()你不知道。

关于node.js - Babel 插件中的 "Visitor.Program.enter()"和 "pre()"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52870522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com