Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript yeoman子生成器如何访问主生成器上定义的变量?_Javascript_Yeoman_Yeoman Generator - Fatal编程技术网

Javascript yeoman子生成器如何访问主生成器上定义的变量?

Javascript yeoman子生成器如何访问主生成器上定义的变量?,javascript,yeoman,yeoman-generator,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.destina

我正在做一个子生成器,我想将主生成器上定义的变量传递给这个子生成器: 诸如此类的事情:

  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\u modules\yeoman generator\lib\base.js:359:33) at Array.forEach(本机) 在Base.checkRequiredArgs(C:\Users\Alexandre\generator-jstack1\generator-generator-jstack1\node\u modules\yeoman generator\lib\Base.js:355:19) at参数(C:\Users\Alexandre\generator-jstack1\generator-generator-jstack1\node\u modules\yeoman generator\lib\base.js:321:8) 在module.exports.yeoman.generators.Base.extend.initialization(C:\Users\Alexandre\generator-jstack1\generator-generator-jstack1\generators\controller\index.js:6:10) 在C:\Users\Alexandre\generator-jstack1\generator-generator-jstack1\node\u modules\yeoman generator\lib\base.js:421:16 在processImmediate[as_immediateCallback](timers.js:383:17)

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

是的,这是正确的方法。生成器之间通信的唯一方式是通过选项和参数(也可以通过缓存/配置和文件系统进行通信,但这些不是常见的通道)


关于这个错误,我猜您是在扩展
生成器.NamedBase
而不是
生成器.Base

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

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

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