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 の前にあるようです。ただし、主な質問は同じままです。パイプライン内のプラグインの順序は、何らかの方法で決定および構成可能にする必要があります。