如何将自耕农提示分成几部分? 我有一个相当广泛的提示,我想分成每个部分都有标题的部分。
CSS
- prompt1
HTML
-prompt 2
这样的事情:
prompt1: function(){
var done = this.async();
condole.log('title 1');
var prompts = [{
name: 'prompt1',
message: 'Prompt 1:',
}]
},
prompt2: function(){
var done = this.async();
condole.log('title 2');
var prompts = [{
name: 'prompt2',
message: 'Prompt 2:',
}]
},
谢谢!
答案 0 :(得分:0)
更新作为@Deimyts注释中的注释,原始代码停止工作。这是由于 Inquirer.JS documented here中的API更改。
- 基本API接口现在是
inquirer.prompt(questions).then()
。没有更多的回调功能。- 任何异步问题函数都将承诺视为返回值,而不是要求
this.async()
。
简而言之,不是使用旧的var done = this.async()
API并使用done()
解决回调内的提示,而只是从prompting
函数(see docs)返回一个承诺
prompt1: function() {
this.log("HTML")
return this.prompt([
// configure prompts as before
]).then(function (answers) {
// callback body as before, but no more calling done()
}.bind(this));
},
有关详细信息,请参阅下面的@Deimyts答案。
Yeoman使用具有某些预定义优先级的运行循环,您可以使用这些优先级来执行操作。如☞ docs中所述,您可以将一些方法分组为一个优先级。这是一个片段,用于说明生成器,其中提示分为两组HTML
和CSS
:
'use strict';
var generators = require('yeoman-generator');
module.exports = generators.Base.extend({
constructor: function () {
generators.Base.apply(this, arguments);
},
prompting: {
prompt1: function() {
this.log("HTML")
var done = this.async();
this.prompt([{
type : 'input',
name : 'foo',
message : 'Foo',
}, {
type : 'input',
name : 'bar',
message : 'Bar'
}], function (answers) {
this.foo = answers.foo;
this.bar = answers.bar;
done();
}.bind(this));
},
prompt2: function() {
this.log("CSS")
var done = this.async();
this.prompt([{
type : 'input',
name : 'bam',
message : 'Bam',
}], function (answers) {
this.bam = answers.bam;
done();
}.bind(this));
}
},
configuring: function () {
console.log(this.foo, this.bar, this.bam);
}
});
使用Yeoman的这个功能,您可以进一步模块化您的代码,例如将不同的提示放在单独的代码文件中,并将require
/ import
放入生成器文件中。但基本上上面的片段应该可以解决问题。
如果有帮助,请告诉我。
答案 1 :(得分:0)
在我对示例代码进行了多次修改之前,之前的回答并不适合我。
我无法100%确定,但我认为差异可能是由于yeoman-generator
模块的不同版本所致。所以,我在这里录制这个,以防其他人遇到同样的问题。
供参考,我使用yeoman-generator v0.23.4
,yo v1.8.4
,node v6.2.2
和& npm v3.9.5
。
删除var done = this.async();
和done()
的所有实例。
async()
函数导致生成器在prompt1
之后退出,并且从不运行prompt2
或configuring
函数。
在致电return
;
this.prompt()
删除async()
会导致生成器在不等待答案的情况下冲过提示。添加return
修复此问题。
将this.prompt()
内的回调函数替换为.then()
。
在进行此更改之前,生成器会正确运行提示,但不会保存答案,而configuring
只会记录undefined undefined undefined
。
原文: this.prompt(prompts, callback(answers).bind(this))
修订:this.prompt(prompts).then(callback(answers).bind(this));
'use strict';
var generators = require('yeoman-generator');
module.exports = generators.Base.extend({
constructor: function () {
generators.Base.apply(this, arguments);
},
prompting: {
prompt1: function() {
this.log("HTML")
return this.prompt([{
type : 'input',
name : 'foo',
message : 'Foo',
}, {
type : 'input',
name : 'bar',
message : 'Bar'
}]).then(function (answers) {
this.foo = answers.foo;
this.bar = answers.bar;
}.bind(this));
},
prompt2: function() {
this.log("CSS")
return this.prompt([{
type : 'input',
name : 'bam',
message : 'Bam',
}])
.then(function(answers) {
this.bam = answers.bam;
}.bind(this));
}
},
configuring: function () {
console.log(this.foo, this.bar, this.bam);
console.log('Config: ', this.config);
},
});