2015-04-22 14 views
10

Ich bin ein Yeoman Generator zusammenstellen und haben Probleme zu verstehen, wie der Parameter Optionen von composeWith() funktioniert. Mein Ziel ist es, Benutzereingaben von der Eingabeaufforderung des Hauptgenerators an Untergeneratoren weiterzuleiten, und ich dachte mir, dass dies der Fall wäre.Verwenden Sie composeWith Optionen in Sub-Generator

Mein Hauptgenerator ist Auffordern sieht ungefähr so ​​aus:

prompting: function() { 
    var done = this.async(); 

    var prompts = [ 
     { 
     type : 'input', 
     name : 'name', 
     message : 'What is the name of your project?', 
     default : this.appname // Default to current folder name 
     } 
    ]; 

    this.prompt(prompts, function (answers) { 

     this.composeWith('app:subgenerator', { 
      options: { 
      name: answers.name; 
      } 
     }, 
     { 
      local: require.resolve('generator-angular/app') 
     }); 
     done(); 
    }.bind(this) 
) 
} 

ich in meinem Unter Generator versucht habe, eine lokale Variable zu setzen, die Argumente im Konstruktor (weil ich das ist angenommen, wenn die Optionen wären), wie folgt:

module.exports = generators.Base.extend({ 
    constructor: function() { 
    generators.Base.apply(this, arguments); 
    this.foo = arguments.options.name; 
    } 
} 

Aber das hat nicht funktioniert. Ich habe versucht, die arguments-Variable zu protokollieren, und es zeigt, dass Optionen ein Objekt ist, aber es scheint leer zu sein.

Kann ich Benutzereingaben über einen Generator an einen anderen weitergeben, oder gibt es einen anderen Weg, dies zu tun?

Antwort

7

Ihr Untergenerator muss so geschrieben werden, wie Sie normale Optionen schreiben würden.

module.exports = generators.Base.extend({ 
    constructor: function() { 
    generators.Base.apply(this, arguments); 

    this.option('name'); 
    }, 

    initializing: function() { 
    console.log(this.options.name) 
    } 
} 

Siehe user interaction documentation für weitere Details.

+0

Ja, das hat den Trick gemacht. Habe nicht ganz verstanden, wie die Optionen aus der Dokumentation funktionierten. Vielen Dank! –

+0

@JoshVickerson Fühlen Sie sich frei, eine PR zu senden, um unsere Dokumentation zu klären, das wäre willkommen! –