2016-07-06 50 views
1

我在擺弄yeoman,想寫一個簡單的html5樣板的第一個生成器。我的問題是,我的發電機中的兩個功能單獨工作,但不在一起,我不知道爲什麼。我從yeoman頁面查看了一些生成器,但是我沒有看到我做錯了什麼。我希望你能幫助我。這是我的代碼:Yeoman複製功能在提示後不起作用

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

在此先感謝!

回答

1

嘗試使用promises版本的提示功能,如yeoman.io所示。

實施例:

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

的變化:

  1. this.prompt()之前添加return

  2. 變化this.prompt(prompts, callback);this.prompt(prompts).then(callback);

+0

謝謝,但這不是:-(工作......控制檯提供了一個錯誤「對象的翻譯:有沒有方法‘然後’」 ......我我試圖更新yeoman生成器,但是錯誤仍然存​​在,我沒有那麼習慣承諾,但爲什麼其他生成器不工作,不使用承諾? – sonnenpriester

+0

沒有承諾的舊語法仍然可行 - 它只是可能比較新的方法更不可靠爲了更好地瞭解發生了什麼,你可以嘗試將'this'記錄到控制檯 - 'this'應該指向整個生成器對象,如果不是,那可能是源碼你的問題。 – Deimyts