Вызов генератора йоменов после завершения работы генератора

Я хочу позвонить другому генератору йоменов после завершения установки первого генератора, это будет основано на ответе, который я даю на одно из приглашений.

Я попытался вызвать его в конце.

end: function () {
  this.installDependencies({
    callback: function () {

      if( this.generator2 ){
        shell.exec('yo generator2');
      }

    }.bind(this)
  });
},

Это запускает генератор 2, но я не могу ответить ни на какие запросы.

Это 2 отдельных генератора, поэтому я не могу сделать второй вспомогательным генератором.


person zizther    schedule 08.04.2015    source источник


Ответы (3)


Используйте композицию от Yeoman.

Что касается кода, не используйте обратный вызов this.installDependencies() (это не сработает так, как вы ожидаете). Вместо этого используйте приоритеты цикла выполнения.

Кроме того, вам следует пересмотреть свою логику и то, как вы думаете о своей текущей проблеме. При составлении генераторов основная идея состоит в том, чтобы сохранить их разъединенными. Их не должен волновать порядок, они должны запускаться в любом порядке и выводить один и тот же результат. Думая о своем коде таким образом, вы значительно уменьшите сложность и сделаете его более надежным.

person Simon Boudrias    schedule 19.04.2015

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

Итак, в генераторе1 вы можете позвонить

this.env.run('generator2');

Это также позволит вам отвечать на запросы в генераторе2.

person hankor    schedule 26.02.2018

При использовании .composeWith функция группы приоритетов (например: prompting, writing...) будет выполняться для всех генераторов, затем будет выполняться следующая группа приоритетов. Если вы вызываете .composeWith для generatorB из generatorA, тогда выполнение будет, например:

генераторA.prompting => генераторB.prompting => генераторA.запись => генераторB.запись

Вы можете охватить все возможные сценарии выполнения, проверку условий с помощью этой концепции, а также использовать options из .composeWith('my-genertor', { 'options' : options })

Если вы хотите контролировать выполнение между разными генераторами, я советую вам создать «основной» генератор, который объединяет их вместе, как написано в http://yeoman.io/authoring/composability.html#order:

// In my-generator/generators/turbo/index.js
module.exports = require('yeoman-generator').Base.extend({
  'prompting' : function () {
    console.log('prompting - turbo');
  },

  'writing' : function () {
    console.log('prompting - turbo');
  }
});

// In my-generator/generators/electric/index.js
module.exports = require('yeoman-generator').Base.extend({
  'prompting' : function () {
    console.log('prompting - zap');
  },

  'writing' : function () {
    console.log('writing - zap');
  }
});

// In my-generator/generators/app/index.js
module.exports = require('yeoman-generator').Base.extend({
  'initializing' : function () {
    this.composeWith('my-generator:turbo');
    this.composeWith('my-generator:electric');
  }
});
person p1100i    schedule 01.03.2016