在发电机完成后调用yeoman发电机

时间:2015-04-08 10:58:12

标签: node.js yeoman yeoman-generator

我希望在第一台发电机完成安装后调用另一台自动生成器,这将基于我给出的一个提示的答案。

我试着在最后调用它。

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

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

    }.bind(this)
  });
},

这会运行generator2,但我无法回答任何提示。

这是两个独立的发电机,所以我不能将第二个发电机作为子发电机。

3 个答案:

答案 0 :(得分:1)

使用Yeoman composability feature

关于代码,不要使用this.installDependencies()回调(它不会像您期望的那样工作)。而是使用run loop priorities

此外,您应该检查您的逻辑以及您对当前问题的看法。在编写生成器时,核心思想是保持两者分离。他们不应该关心排序,他们应该以任何顺序运行并输出相同的结果。以这种方式考虑您的代码将大大降低复杂性并使其更加健壮。

答案 1 :(得分:1)

使用.composeWith时,将对所有生成器执行优先级组功能(例如:promptingwriting ...),然后执行下一个优先级组。如果您从 generatorA 内部致电.composeWith generatorB ,则会执行,例如:

  

generatorA.prompting => generatorB.prompting => generatorA.writing =>   generatorB.writing

您可以涵盖所有可能的执行方案,使用此概念进行条件检查,也可以使用options的{​​{1}}

如果你想控制不同发电机之间的执行,我建议你创建一个" main"将它们组合在一起的生成器,就像在http://yeoman.io/authoring/composability.html#order上写的那样:

.composeWith('my-genertor', { 'options' : options })

答案 2 :(得分:1)

我认为这是一个较老的问题,但我遇到了类似的要求。想确保列出所有选项。我同意其他答案,它是使用composability feature&的最佳选择。保持订单无关紧要。但是如果真的有必要按顺序运行生成器: 您还可以使用integration features执行另一个生成器。

所以在generator1中你可以调用

this.env.run('generator2');

这也可以让你回答generator2中的提示。