我希望在第一台发电机完成安装后调用另一台自动生成器,这将基于我给出的一个提示的答案。
我试着在最后调用它。
end: function () {
this.installDependencies({
callback: function () {
if( this.generator2 ){
shell.exec('yo generator2');
}
}.bind(this)
});
},
这会运行generator2,但我无法回答任何提示。
这是两个独立的发电机,所以我不能将第二个发电机作为子发电机。
答案 0 :(得分:1)
使用Yeoman composability feature。
关于代码,不要使用this.installDependencies()
回调(它不会像您期望的那样工作)。而是使用run loop priorities。
此外,您应该检查您的逻辑以及您对当前问题的看法。在编写生成器时,核心思想是保持两者分离。他们不应该关心排序,他们应该以任何顺序运行并输出相同的结果。以这种方式考虑您的代码将大大降低复杂性并使其更加健壮。
答案 1 :(得分:1)
使用.composeWith
时,将对所有生成器执行优先级组功能(例如:prompting
,writing
...),然后执行下一个优先级组。如果您从 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中的提示。