如何在主发电机上定义的yeoman子发电机访问变量?

时间:2015-11-30 00:40:15

标签: javascript yeoman yeoman-generator

我正在做一个子生成器,我想传递给主生成器上定义的这个子生成器变量: 有点像这样:

  writing: function() {
    console.log(this.appversion);
    var email = this.email; // Variable defined on the main controller.
    this.fs.copy(
      this.templatePath('somefile.js'),
      this.destinationPath('somefile.js')
    );

我试图在主生成器上执行类似下面的代码:

this.composeWith('jstack1:controller', {options: {name: 'some-name'}});

以及子发生器下面的代码

this.option('name', {/* settings */});

但我不确定这是否是一个很好的方法,而且我总是收到以下错误消息:

  

错误:没有提供必要的参数[1mname [22m!       在null。 (C:\用户\ Alexandre_ \发电机jstack1 \发电机 - 发电机 - jstack1 \ node_modules \自耕农发电机\ lib中\ base.js:359:33)       at Array.forEach(native)       在Base.checkRequiredArgs(C:\ Users \ Alexandre_ \ generator-jstack1 \ generator-generator-jstack1 \ node_modules \ yeoman-generator \ lib \ base.js:355:19)       at argument(C:\ Users \ Alexandre_ \ generator-jstack1 \ generator-generator-jstack1 \ node_modules \ yeoman-generator \ lib \ base.js:321:8)       在module.exports.yeoman.generators.Base.extend.initializing(C:\ Users \ Alexandre_ \ generator-jstack1 \ generator-generator-jstack1 \ generators \ controller \ index.js:6:10)       在C:\ Users \ Alexandre_ \ generator-jstack1 \ generator-generator-jstack1 \ node_modules \ yeoman-generator \ lib \ base.js:421:16       at processImmediate [as _immediateCallback](timers.js:383:17)

2 个答案:

答案 0 :(得分:1)

我找到了一种方法,这很简单。

首先在主生成器中,我在存储中添加上下文变量:

  var templateContext = {

    appname: this.appname,

    appdescription: this.appdescription,

    appversion: this.appversion,

    applicense: this.applicense,

    appautor: this.appautor,

    appemail: this.appemail

  };



  this.config.set('templateContext',templateContext);

然后在子生成器中我得到了templateContext:

var templateContext = this.config.get('templateContext');

答案 1 :(得分:0)

  

但我不确定这是否是一个好方法

是的,这是正确的方法。生成器相互通信的唯一方法是通过选项和参数。 (还可以通过缓存/配置和文件系统进行一些通信,但这些不是频繁的通道。)

关于错误,我猜你是在延长generators.NamedBase而不是generators.Base