sonnenpriester
sonnenpriester

Reputation: 149

Yeoman copy function doesn't work after prompting

i am fiddleing around with yeoman and want to write my first generator for a simple html5 boilerplate. My problem is, that the two functions in my generator work well on their own but not together and i don't know why. I checked some generators from the yeoman page, but i don't see what i am doing wrong. I hope you can help me. This is my code:

'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" }
    );
  },
});

Thanks in advance!

Upvotes: 1

Views: 162

Answers (1)

Deimyts
Deimyts

Reputation: 374

Try using the Promises version of the prompting function, as shown on yeoman.io.

Example:

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));
  },

Changes:

  1. add return before this.prompt().

  2. change this.prompt(prompts, callback); to this.prompt(prompts).then(callback);

Upvotes: 1

Related Questions