这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战。
如果说child_process是自动化构建的基石,那inquirer则使自动化构建变得更敏捷,更可扩展。
首先,inquirer是什么呢?inquirer就是一个用户与命令行交互的工具,常见于各个地方,比如命令行中的yes/no询问,remark的输入,list的选择等等。
1.介绍
inquirer为用户解决的痛点在于:
- 提供错误回调
- 询问操作者问题
- 获取并解析用户输入
- 检测用户回答是否合法
- 管理多层级的提示
- 由于交互的问题种类不同,inquirer为每个问题提供很多参数:
type:表示提问的类型,包括:input, confirm, list, rawlist, expand, checkbox, password, editor;
name: 存储当前问题回答的变量;
message:问题的描述;
default:默认值;
choices:列表选项,在某些type下可用,并且包含一个分隔符(separator);
validate:对用户的回答进行校验;
filter:对用户的回答进行过滤处理,返回处理后的值;
transformer:对用户回答的显示效果进行处理(如:修改回答的字体或背景颜色),但不会影响最终的答案的内容;
when:根据前面问题的回答,判断当前问题是否需要被回答;
pageSize:修改某些type类型下的渲染行数;
prefix:修改message默认前缀;
suffix:修改message默认后缀。
inquirer返回一个promise对象,可以通过.then()方法进行下一步的回调,更好的处理了我们需要的异步时间。
2.语法结构
const inquirer = require('inquirer');
const promptList = [
];
inquirer.prompt(promptList).then(result => {
console.log(result);
})
3.type分类
- input
输入框,一般用于让用户填写信息等等方面,也可以通过正则校验
const promptList = [{
type: 'input',
message: '请输入手机号:',
name: 'phone',
validate: function(val) {
if(val.match(/\d{11}/g)) { // 校验位数
return val;
}
return "请输入11位数字";
}
}]
- confirm
这个也很常见,比如我们停止命令时,让我们选择yes/no
const promptList = [{
type: "confirm",
message: "是否终止?",
name: "终止",
prefix: "前缀",
suffix: "后缀",
}];
- list
list用来多项选择,当只想让用户在你给定的答案中选择时,可以用list来限定已经提高效率,比较enter总比打字更迅速。
const promptList = [{
type: 'list',
message: '请选择:',
name: 'options',
choices: [
"Aaa",
"Bbb",
"Ccc"
],
//filter可以对答案进行优化
filter: function (val) {
return val.toLowerCase();
}
}];
- password
密码输入,可以隐藏你的输入值
const promptList = [{
type: "password",
message: "请输入密码:",
name: "pwd" }
];
4.最后
inquirer的作用在于锦上添花,能让你的项目升华一个层次,让人使用起来更加舒服。