TL; DR:Babelプラグインの実行順序を指定する方法はありますか? Babelはこの注文をどのように決定しますか?バベルの情報源へのダイビングとは別にこの仕組みがどのような仕組みになっていますか?Babelプラグインが実行されます
私自身のBabelプラグインを開発しています。私はそれを実行すると、私のプラグインは他のes2015プラグインの前に実行されることに気付きました。など
const a =() => 1
と訪問者:例のようなコードを持つために
visitor: {
ArrowFunctionExpression(path) {
console.log('ArrowFunction')
},
FunctionExpression(path) {
console.log('Function')
},
}
私のプラグインがArrowFunction(およびない関数)を観察します。私はプラグインがバベル構成に示されている順序で再生、それは何も変更されませんでした:
plugins: ['path_to_myplugin', 'transform-es2015-arrow-functions'],
plugins: ['transform-es2015-arrow-functions', 'path_to_myplugin'],
大藤を、これは何とか問題の順序のようんになります。
https://phabricator.babeljs.io/T6719
---- EDIT ----
私はライターの私の訪問者は、以下のようにあればことが判明:
ArrowFunctionExpression: {
enter(path) {
console.log('ArrowFunction')
}
},
FunctionExpression: {
exit(path) {
console.log('Function')
}
},
両方の関数が呼び出されます。つまり、実行順序は次のようになります。myplugin_enter - > other_plugin - > myplugin_exit。言い換えれば、mypluginは内部パイプラインのother_pluginの前にあるようです。しかし、主な問題は同じです。パイプライン内のプラグインの順序は、どうにかして設定することができます。&
ありがとうございます。私の.babelrcが無効になっていて、 'plugins:['transform-es2015-arrow-functions'、 'path_to_myplugin']'のような 'プラグインの順序'であっても、transform-es2015-arrow-functionsのenter関数は明らかにAFTER mypluginのenter関数と呼ばれます。なぜこれはそうですか? babelでプラグインの順序を設定する方法はありますか(プリセットを扱うことは別ですが、これは非常に細かい種類のコントロールではありません)。 –
また、 '...各グループは後のプラグイン/プリセットを以前のものよりも前に実行しています。'あなたは「グループ」の意味を説明してください。 –
私は似たような状況です。より高いスコープで別の訪問者機能を持っていますか、実際の訪問者と 'path.traverse'を呼び出す' Program'の可能性がありますか?私はこれが最初に呼ばれるだろうと思っています。 –