Предотвратить плагин свойств класса Babel от перезаписи моего сгенерированного конструктора - PullRequest
0 голосов
/ 07 января 2019

Обзор

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

0 голосов
/ 11 февраля 2019

Я закончил тем, что попросил помощи в сообществе вавилонцев, и они смогли помочь мне решить эту проблему.

Проблема заключалась в том, что я использовал другого посетителя в моей реализации - у меня были посетители, указанные для ClassDeclaration и ClassMethod, но посетитель в реализации plugin-proposal-class-properties был на Class. Когда я изменил свой код на работу с Class и убедился, что мой работает первым, свойства были добавлены в мой пользовательский конструктор, как и ожидалось.

...