2017-12-18 5 views
0

Ich schreibe einen Generator, in dem ein Benutzer aufgefordert wird, einen Parameter, nennen wir es option. Je nach ihrer Antwort möchte ich eine der Ausgabedateien ändern:Yeoman Generator - Wie man den Inhalt einer Datei in Abhängigkeit von einer Aufforderung ändert Parameter

SomeClass.java

public class SomeClass{ 

    //if option=x I don't want to include this attribute: 
    private String field1; 

    //if option=x I want to generate an attribute with the value of the promted attribute 
    private String ${info}; 

Wie kann ich die in den Kommentaren oben beschriebenen Aktionen durchführen?

Antwort

0

index.js

Hier im prompting() Methode, die Sie alle Ihre Anweisungen deklariert werden und die Art der Eingabeaufforderung mit Namen enthalten. Dann in writing() finden Sie diejenigen, auf die Vorlage übergeben, die hier MyClass.java

module.exports = class extends Generator { 
    prompting() { 
    // Have Yeoman greet the user. 
    this.log(yosay(
     'Welcome to the remarkable ' + chalk.red('generator-react-starter-kit-relay-container') + ' generator!' 
    )); 

    const prompts = [{ 
     type: 'input', 
     name: 'info', 
     message: 'INFO IN YOUR CLASS' 
    }, { 
     type: 'confirm', 
     name: 'x', 
     message: 'YOUR OPTION X' 
    }]; 

    return this.prompt(prompts).then(props => { 
     this.props = props; 
    }); 
    } 

    writing() { 
    this.fs.copyTpl(
     this.templatePath('MyClass.js'), 
     this.destinationPath(<YOUR DESTINATION PATH>), 
     { 
     info: this.props.info, 
     x: this.props.x 
     } 
    ); 
    } 
}; 

templates/MyClass.java

public class MyClass{ 

    <% if (x) { %> 
    private String <%= info %>; 
    <% } else { %> 
    private String field1; 
    <% } %> 

} 
+0

Hoppla, ich habe nicht gesehen, dass dies vor 21 Stunden gebeten wurde. –

+0

Hallo, ich weiß deine Antwort zu schätzen, ich antwortete mir zur gleichen Zeit wie du. Wie auch immer, ich akzeptiere deins, weil du dir die Zeit genommen hast zu helfen ;-) – codependent

+0

Ja, dein Update hat diese Frage vielleicht an die Spitze der Liste geschoben, also nahm ich an, dass es eine neue Frage war. Wie auch immer, Prost! –

0

Dies ist, wie ich es gelöst:

SomeClass.java :

public class SomeClass{ 

    <%_ if (option == 'x') { _%> 
    private String field1; 
    <%_ } _%> 

    private String <%= nombre %>; 

Und dies ist der Generator Code:

module.exports = class extends Generator { 
    prompting() { 
    // Have Yeoman greet the user. 
    this.log(yosay(
     'Welcome to the super-duper ' + chalk.red('generator-mygenerator') + ' generator!' 
    )); 

    const prompts = [{ 
     type: 'input', 
     name: 'option', 
     message: 'Option?', 
     default: 'x' 
    }, 
    { 
     type: 'input', 
     name: 'info', 
     message: 'Field name?', 
     default: 'field' 
    } 
    ]; 

    return this.prompt(prompts).then(props => { 
     this.props = props; 
    }); 
    } 

    writing() { 
    this.fs.copyTpl(
     this.templatePath('SomeClass.java'), 
     this.destinationPath('SomeClass.java'), this.props); 
    } 
} 
Verwandte Themen