Запретить плагину свойств класса 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и удостоверился, что мой запускается первым, свойства были добавлены в мой пользовательский конструктор, как и ожидалось.

Другие вопросы по тегам