【问题标题】:Calling a yeoman generator after a generator has finished在生成器完成后调用 yeoman 生成器
【发布时间】:2015-04-08 10:58:12
【问题描述】:

我希望在第一个生成器完成安装后调用另一个 yeoman 生成器,这将基于我对其中一个提示给出的答案。

我已经尝试在最后调用它。

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

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

    }.bind(this)
  });
},

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

这是 2 个独立的生成器,所以我不能将第二个作为子生成器。

【问题讨论】:

    标签: node.js yeoman yeoman-generator


    【解决方案1】:

    使用 Yeoman composability feature

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

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

    【讨论】:

      【解决方案2】:

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

      所以在 generator1 中你可以调用

      this.env.run('generator2');
      

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

      【讨论】:

        【解决方案3】:

        当使用.composeWith 时,优先级组函数(例如:promptingwriting...)将对所有生成器执行,然后是下一个优先级组。如果您从 generatorA 内部调用 .composeWithgeneratorB,则执行将是,例如:

        generatorA.prompting => generatorB.prompting => generatorA.writing => 生成器B.writing

        您可以涵盖所有可能的执行场景,使用此概念进行条件检查,还可以使用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');
          }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-14
          • 1970-01-01
          • 2015-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-23
          相关资源
          最近更新 更多