2016-07-06 31 views
1

Ich bin mit yeoman rumspielen und möchte meinen ersten Generator für eine einfache html5 Boilerplate schreiben. Mein Problem ist, dass die beiden Funktionen in meinem Generator gut funktionieren, aber nicht zusammen und ich weiß nicht warum. Ich habe einige Generatoren von der Yeoman-Seite überprüft, aber ich sehe nicht, was ich falsch mache. Ich hoffe ihr könnt mir helfen. Das ist mein Code:Yeoman Kopierfunktion funktioniert nicht nach Aufforderung

'use strict'; 
var generators = require('yeoman-generator'); 
var yosay = require('yosay'); 

module.exports = generators.Base.extend({ 

    initializing: function(){ 
    this.log(yosay("\'Allo \'allo I will create your HTML5 Boilerplate...")); 
    }, 

    prompting: function() { 
    var done = this.async(); 
    this.prompt({ 
     type: 'input', 
     name: 'name', 
     message: 'Your project name', 
     //Defaults to the project's folder name if the input is skipped 
     default: this.appname 
    }, function(answers) { 

     this.props = answers 
     this.log(answers.name); 
     done(); 
    }.bind(this)); 
    }, 

    writing: function(){ 
    this.fs.copyTpl(
     this.templatePath('_page/_index.html'), 
     this.destinationPath('index.html'), 
     { title: "answers.name" } 
    ); 
    }, 
}); 

Vielen Dank im Voraus!

Antwort

1

Verwenden Sie die Promises-Version der Aufforderungsfunktion, wie unter yeoman.io angezeigt.

Beispiel:

prompting: function() { 
    return this.prompt({ 
     type: 'input', 
     name: 'name', 
     message: 'Your project name', 
     //Defaults to the project's folder name if the input is skipped 
     default: this.appname 
    }).then(function(answers) { 
     this.props = answers 
     this.log(answers.name); 
    }.bind(this)); 
    }, 

Änderungen:

  1. hinzufügen return vor this.prompt().

  2. Änderung this.prompt(prompts, callback); zu this.prompt(prompts).then(callback);

+0

Danke, aber das funktioniert nicht :-(... die Konsole gibt einen Fehler "Object [object Object] hat keine Methode 'und dann'" ... i Ich habe versucht, den Yeoman Generator zu aktualisieren, aber der Fehler bleibt.Ich bin nicht so sehr an Versprechungen gewöhnt, aber warum arbeiten die anderen Generatoren, die keine Versprechungen verwenden? – sonnenpriester

+0

Die alte Syntax, ohne die Versprechen, funktioniert immer noch - es könnte nur unzuverlässiger sein als die neuere Methode.Um eine bessere Vorstellung davon zu erhalten, könnten Sie versuchen, 'this' auf der Konsole zu protokollieren -' this' sollte sich auf das gesamte Generator-Objekt beziehen.Wenn dies nicht der Fall ist, ist dies wahrscheinlich die Quelle von deinem Problem. – Deimyts