开头
这篇就有点好玩了,讲的是怎么和用户交互。
用户交互
输出信息
直接this.log()
来输出信息。用console.log()
也可以,没看出有什么区别。
module.exports = generators.Base.extend({
myAction: function () {
this.log('Something has gone wrong!');
}
});
填写
yeoman
使用了Inquirer.js作为这个功能的模块。注意prompting
这个函数名是固定的。下面的代码就是让用户确认一下项目的名称。
module.exports = generators.Base.extend({
prompting: function () {
var done = this.async();
this.prompt({
type : 'input',
name : 'name',
message : 'Your project name',
default : this.appname
}, function (answers) {
this.log(answers.name);
done();
}.bind(this));
}
})
Inquirer.js除此之外还有其他的类型,最好看看文档,里面也有运行的效果。
用户默认
这里提供了一个不错的功能,就是把这个默认值给设置为上一次的值,就是记住上一次
。这个属性是yeoman
做的扩展。
this.prompt({
type : 'input',
name : 'username',
message : 'What\'s your Github username',
store : true
}, callback);
参数
用户输入这个命令的时候,脚手架就会获取到这个命令。
yo webapp my-project
我们用generator.argument()
来读取这个参数
这个是栗子。有个地方注意一下。就是参数和选项的处理都是放在构造函数里的。
module.exports = generators.Base.extend({
constructor: function () {
generators.Base.apply(this, arguments);
// 这样在运行命令的时候就必须要有这个参数,不然会报错
this.argument('appname', { type: String, required: true });
// 取出来
this.log(this.appname);
}
});
对参数有这么几个配置选项。
desc 描述
required 是否必填
optional 这个我没搞懂
type 类型
String
,Number
,Array
和Object
defaults 默认值
banner 会显示在使用手册里
这里的配置,在命令行里输入yo limi --help
,就可以看到。
选项
选项就是加了--
的那个。
yo webapp --coffee
用法和参数差不多。
module.exports = generators.Base.extend({
constructor: function () {
generators.Base.apply(this, arguments);
// 从命令行获取 `--coffee`
this.option('coffee');
// 取出来
this.log(this.options.coffee);
}
});
desc 描述
type 类型
defaults 默认值
hide 是否从help中隐藏
结尾
除此之外还有其他的API,可以去看看文档。