Как создать йоменский базовый класс? - PullRequest
0 голосов
/ 30 октября 2018

Я хотел бы иметь возможность использовать базовый класс, который предоставляет общие функциональные возможности для моих классов Yeoman. Что-то вроде:

const Generator = require('yeoman-generator');

class MyCustomGenerator extends Generator {
  writing() { /* overridable code here */ }
  end() { /* overridable code here */ }
}

module.exports = class extends MyCustomGenerator { /* Custom behavior here */ }

Однако, когда я делаю это, йоменские функции в MyCustomGenerator, такие как , пишущие и end , не вызываются.

Я посмотрел исходный код Yeoman и обнаружил, что Yeoman смотрит только на свойства расширенного класса: https://github.com/yeoman/generator/blob/master/lib/index.js#L398

Каков наилучший способ расширить класс Yeoman Generator, чтобы я мог обеспечить поведение по умолчанию, которое может быть переопределено подклассами?


Примечания. Я обнаружил, что выполнение следующего странного кода добавит функцию к прототипу дочернего элемента, а дочерний генератор унаследует поведение, как и ожидалось:

class MyCustomGenerator extends Generator {
  constructor() {
    super();
    Object.getPrototypeOf(this).writing = Object.getPrototypeOf(this).writing;
    Object.getPrototypeOf(this).end = Object.getPrototypeOf(this).end;
  }

  writing() { /* overridable code here */ }
  end() { /* overridable code here */ }
}
...