2015-11-30 79 views
1

我做一個副發電機,我想傳遞給主生成器來定義這種副發電機變量: 有些東西像:yeoman子生成器如何訪問主生成器上定義的變量?

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 */}); 

但我不知道這是否是一個去OD辦法做到這一點,而且我總是得到以下錯誤消息:

Error: Did not provide required argument [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)

回答

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

But I am not sure if it is a good way to do this

是的,這是做了正確的道路。發電機相互通信的唯一方式是通過選項和參數。 (也有一些通過緩存/配置和文件系統的可能的通信,但這些不是頻繁的通道。)

關於錯誤,我猜你是在擴展generators.NamedBase而不是generators.Base