我可以在Yeoman子生成器中定义一个选项,然后从基础生成器引用该选项吗?

时间:2016-09-09 17:12:31

标签: javascript yeoman yeoman-generator-angular

我有一个位于基本生成器中的EJS模板文件,但需要能够从基本生成器和子生成器中读取选项。

基础生成器

module.exports = generators.Base.extend({
  constructor: function() {
    generators.Base.apply(this, arguments);

    this.option('option1');
  },

  initializing: function() {
    this.composeWith('base:sub-gen', this.options, {
      local: require.resolve('../sub-gen'),
      link: 'strong'
      });
  }
});

子发生器

module.exports = generators.Base.extend({
  constructor: function() {
    generators.Base.apply(this, arguments);

    this.option('option2');
  },
});

模板

Base generator option: <%=this.options.option1 %>
Sub-generator option: <%=this.options.option2 %>

有没有办法从我的ejs模板中引用子生成器选项? 除此之外,我还能如何确保我的基础发生器和我的子发生器都可以访问相同的选项列表?也许可以使用.yo-rc.json

1 个答案:

答案 0 :(得分:0)

在完成更多工作后,我找到了解决方案:

  1. 在两个生成器中,在configuring步骤中设置配置,但在default步骤中读取它们。
  2. 在使用this.config.get('key')this.config.getAll()阅读配置后,将它们保存为您要在其中使用的生成器的属性:this.imports = this.config.get('option-name')
  3. 实施例

    基础生成器

    module.exports = generators.Base.extend({
      constructor: function() {
        generators.Base.apply(this, arguments);
    
        this.option('option1');
      },
    
      initializing: function() {
        this.composeWith('base:sub-gen', this.options, {
          local: require.resolve('../sub-gen'),
          link: 'strong'
          });
      },
    
      configuring: function () {
        let configs = {
          option1: option1
        };
    
        this.config.set(configs);
      },
    
        default: function() {
            let config = this.config.getAll()
            this.imports = this.config.get('subGenOptions');
        },
    });
    

    子发生器

    module.exports = generators.Base.extend({
      constructor: function() {
        generators.Base.apply(this, arguments);
    
        this.option('option2');
      },
      configuring: function() {
        let configs = {
            subGenOptions: {
                option2: this.options.option2
            }
        }
    
        this.config.set(configs)
      },
    });
    

    模板(在基础生成器中)

    Base generator option: <%=options.option1 %>
    Sub-generator option: <%=imports.option2 %>