繁体   English   中英

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

[英]How can a yeoman sub-generator access variables defined on the main 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! 为空。 (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)

我已经找到了一种方法,而且非常简单。

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

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

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

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

关于错误,我猜是您要扩展generators.NamedBase而不是generators.Base

暂无
暂无

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

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