【发布时间】:2016-01-05 18:27:53
【问题描述】:
TL;DR:有没有办法指定 Babel 插件的运行顺序? Babel 是如何确定这个顺序的?除了深入研究 Babel 资源之外,是否有任何规范?
我正在开发自己的 Babel 插件。我注意到,当我运行它时,我的插件在其他 es2015 插件之前运行。例如有如下代码:
const a = () => 1
和访客如:
visitor: {
ArrowFunctionExpression(path) {
console.log('ArrowFunction')
},
FunctionExpression(path) {
console.log('Function')
},
}
我的插件观察 ArrowFunction(而不是 Function)。我按照插件在 Babel 配置中列出的顺序进行了操作,但这并没有改变任何东西:
plugins: ['path_to_myplugin', 'transform-es2015-arrow-functions'],
plugins: ['transform-es2015-arrow-functions', 'path_to_myplugin'],
OTOH,看起来顺序确实很重要:
https://phabricator.babeljs.io/T6719
---- 编辑----
我发现如果我这样写我的访问者:
ArrowFunctionExpression: {
enter(path) {
console.log('ArrowFunction')
}
},
FunctionExpression: {
exit(path) {
console.log('Function')
}
},
这两个函数都被调用了。所以看起来执行顺序是:myplugin_enter -> other_plugin -> myplugin_exit。换句话说, myplugin 在某些内部管道中似乎在 other_plugin 之前。然而,主要问题保持不变 - 管道中插件的顺序应该以某种方式确定和配置。
【问题讨论】:
标签: plugins transformation babeljs commutativity