简体   繁体   English

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

[英]How can a yeoman sub-generator access variables defined on the main generator?

I am doing a sub-generator and I want to pass to this sub-generator variables defined on the main generator: Some thing like that : 我正在做一个子发电机,我想传递给在主发电机上定义的这个子发电机变量:像这样的东西:

  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')
    );

I've tried to do something like the code below on the main generator: 我尝试在主生成器上执行以下代码:

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

and the code below on the sub-generator 以及下面的子生成器代码

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

But I am not sure if it is a good way to do this ,furthermore I always get the following error message: 但是我不确定这是否是一个好方法,而且我总是收到以下错误消息:

Error: Did not provide required argument [1mname[22m! 错误:未提供必需的参数[1mname [22m! at null. 为空。 (C:\\Users\\Alexandre_\\generator-jstack1\\generator-generator-jstack1\\node_modules\\yeoman-generator\\lib\\base.js:359:33) at Array.forEach (native) at 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) at module.exports.yeoman.generators.Base.extend.initializing (C:\\Users\\Alexandre_\\generator-jstack1\\generator-generator-jstack1\\generators\\controller\\index.js:6:10) at 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) (C:\\ Users \\ Alexandre_ \\ generator-jstack1 \\ generator-generator-jstack1 \\ node_modules \\ yeoman-generator \\ lib \\ base.js:359:33)在Array.forEach(本机)在Base.checkRequiredArgs(C:\\ Users \\ Alexandre_ \\ generator-jstack1 \\ generator-generator-jstack1 \\ node_modules \\ yeoman-generator \\ lib \\ base.js:355:19)在参数(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在processImmediate [as _immediateCallback](计时器的.js:383:17)

I have found a way to do that, and it is very simple. 我已经找到了一种方法,而且非常简单。

First at the main generator I add the context variables at the storage: 首先在主生成器中,将上下文变量添加到存储中:

  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);

then at the sub-generator I get the templateContext with: 然后在子生成器中,我获得templateContext与:

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

But I am not sure if it is a good way to do this 但是我不确定这是否是一个好方法

Yes, this is the correct way to do it. 是的,这是正确的方法。 The only way generators communicate with each other is via options and arguments. 生成器相互通信的唯一方法是通过选项和参数。 (There's also some communication possible through cache/configurations and the file system, but these are not frequent channels.) (也可以通过高速缓存/配置和文件系统进行某些通信,但这些不是频繁的通道。)

About the error, my guess is you're extending generators.NamedBase rather than generators.Base . 关于错误,我猜是您要扩展generators.NamedBase而不是generators.Base

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM