Нет разницы AFAIK.Оба вызываются до / после полного обхода синтаксического дерева.
Единственное отличие состоит в том, что параметры, передаваемые в Program.enter
/ Program.exit
, отличаются от параметров, передаваемых в pre
/ * 1006.*.
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()
у вас нет.