Почему функция _directory вызывается четыре раза в подклассе yeoman.generators.Base?

Вот как я расширяю йоменский генератор Base учебный класс

module.exports = yeoman.generators.Base.extend({
  prompting: function () {
    var done = this.async();

    // Have Yeoman greet the user.
    this.log(yosay(
      'Welcome to the cool ' + chalk.red('generator-zeetings') + ' generator!'
    ));

    var prompts = [{
      ...  
    }];

    this.prompt(prompts, function (props) {
      this.props = props;
      // ...
      done();
    }.bind(this));
  },

  _directory: function (source, destination) {
      // Simplified for this question
      var src = path.join(source, 'index.html');
      var dest = path.join(destination, 'final.html');
      console.log('Copy from ' + src + ' to ' + dest);
      this.fs.copyTpl(
        this.templatePath(src),
        this.destinationPath(dest),
        this.props
      );

  },

  prepareApp: function () {
    this._directory(this.templatePath(), this.destinationRoot('app'));
  },

  prepareData: function () {
    this._directory(this.templatePath(), this.destinationRoot('data'));
  },

  writing: function () {
    this.prepareApp();
    this.prepareData();
  },
});

Я считаю, что по какой-то причине вспомогательная функция _directory называется 4 раза.

Я ожидал, что функция вызывается только дважды, один для app а другой для папки data, посредством writing функция.

Оказывается, если я готовлюсь _ в appendApp а также appendData, генератор будет вести себя как я ожидал.

Что я хочу понять:

1) Кажется, я не нахожу это поведение задокументированным на веб-сайте Йомана. Ожидается ли такое поведение ("вызов каждого открытого метода в подклассе")?

2) Если это ожидаемое поведение, как я могу контролировать порядок вызова этих открытых методов?

1 ответ

Решение

Обратитесь к документации: http://yeoman.io/authoring/running-context.html

Каждая функция в Йомен-генератор является задачей. Все задачи выполняются автоматически и упорядочиваются в соответствии с их приоритетами (приоритет определяется именем функции / объекта).

Имена функций, начинающиеся с подчеркивания, считаются закрытыми и не будут выполняться.

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