TL; DR: Есть ли способ указать порядок, в котором предполагается запустить плагины Babel? Как Бабель определяет этот порядок? Есть ли какая-либо специфика, как это работает помимо погружений в источники Бабеля?
Я разрабатываю свой собственный плагин Babel. Я заметил, что когда я запускаю его, мой плагин запускается перед другими плагинами es2015. Например, с кодом, например:
const a = () => 1
и посетитель, например:
visitor: {
ArrowFunctionExpression(path) {
console.log('ArrowFunction')
},
FunctionExpression(path) {
console.log('Function')
},
}
мой плагин отмечает ArrowFunction (а не функцию). Я играл с порядком, в котором плагины перечислены в настройке Babel, но это ничего не изменило:
plugins: ['path_to_myplugin', 'transform-es2015-arrow-functions'],
plugins: ['transform-es2015-arrow-functions', 'path_to_myplugin'],
OTOH, это похоже на порядок. Как-то важно:
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 в каком-то внутреннем конвейере. Основной вопрос, однако, остается прежним - порядок плагинов в конвейере должен определяться и конфигурироваться каким-то образом.