Запретить плагину свойств класса babel перезаписать мой сгенерированный конструктор
обзор
Я написал плагин Ba bel, который добавляет пользовательский конструктор для классов. Я также использую @babel/plugin-proposal-class-properties
Плагин для поддержки свойств класса. мой .babelrc
выглядит так:
{
"plugins": [
"./plugins/my-plugin.js",
"@babel/plugin-proposal-class-properties",
]
}
я использую babel-core@7.2.2
, а также @babel/plugin-proposal-class-properties@7.2.3
,
Проблема
Плагин свойств класса перезаписывает мой сгенерированный конструктор. Например, учитывая этот тестовый файл:
// Source
class Test extends Base {
// someProp = 'yay';
}
Если я запускаю без плагина свойств класса, мой конструктор вставляется:
// Transpiled (no class props)
class Test extends Base {
constructor() {
super(...arguments);
console.log('my special custom code');
}
}
Но если я раскомментирую someProp
и включите плагин свойств класса, мой пользовательский код будет перезаписан:
// Transpiled (with class props)
class Test extends Base {
constructor(...args) {
super(...args);
_defineProperty(this, "someProp", 'yay');
}
}
Кажется, не имеет значения, в каком порядке я перечисляю плагины. Это ожидается, есть ли способ обойти это, или это ошибка?
Я не думаю, что реализация моего плагина имеет значение, но если это так, я могу добавить больше деталей.
Любая помощь приветствуется. Спасибо!
1 ответ
В итоге я попросил помощи в сообществе вавилонцев, и они смогли помочь мне решить эту проблему.
Проблема заключалась в том, что я использовал другого посетителя в моей реализации - у меня были посетители, указанные для ClassDeclaration
а также ClassMethod
, но посетитель в plugin-proposal-class-properties
реализация была на Class
, Когда я изменил свой код, чтобы работать от Class
и удостоверился, что мой запускается первым, свойства были добавлены в мой пользовательский конструктор, как и ожидалось.