No more than code.
inquirer.js 交互式命令行工具
| Inquirer 简介
简化询问终端用户问题,解析,验证答案,提供错误反馈等等功能。
Inquirer.js 是非常容易去处理以下几种事情的:
- 提供错误回调
- 询问操作者问题
- 获取并解析用户输入
- 检测用户回答是否合法
- 管理多层级的提示
由于交互的问题种类不同,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 默认后缀。
| 使用
安装:npm install inquirer
// 基本结构
const inquirer = require('inquirer');
const promptList = [
// 具体交互内容
];
inquirer.prompt(promptList).then((answers) => {
console.log(answers); // 返回的结果
});
// input
// 新建 serve.js
const inquirer = require('inquirer');
const promptList = [
{
type: 'input',
message: '设置一个用户名:',
name: 'name',
default: 'test_user', // 默认值
},
{
type: 'input',
message: '请输入手机号:',
name: 'phone',
validate: function (val) {
if (val.match(/\d{11}/g)) {
// 校验位数
return val;
}
return '请输入11位数字';
},
},
];
inquirer.prompt(promptList).then((answers) => {
console.log(answers); // 返回的结果
});
// 运行
node serve.js
// confirm
// 示例1
var inquirer = require('inquirer')
inquirer.prompt([ {
type: 'confirm',
name: 'test',
message: 'Are you handsome?',
default: true
}]).then((answers) => { console.log('结果为:') console.log(answers)})
// 示例2
const promptList = [{
type: "confirm",
message: "是否使用监听?",
name: "watch",
prefix: "前缀"
},{
type: "confirm",
message: "是否进行文件过滤?",
name: "filter",
suffix: "后缀",
when: function(answers) { // 当 watch 为 true 的时候才会提问当前问题
return answers.watch
}
}];
// list
const promptList = [
{
type: 'list',
message: '请选择一种水果:',
name: 'fruit',
choices: ['Apple', 'Pear', 'Banana'],
filter: function (val) {
// 使用 filter 将回答变为小写
return val.toLowerCase();
},
},
];
// rawlist
const promptList = [
{
type: 'rawlist',
message: '请选择一种水果:',
name: 'fruit',
choices: ['Apple', 'Pear', 'Banana'],
},
];
// expand
const promptList = [
{
type: 'expand',
message: '请选择一种水果:',
name: 'fruit',
choices: [
{
key: 'a',
name: 'Apple',
value: 'apple',
},
{
key: 'O',
name: 'Orange',
value: 'orange',
},
{
key: 'p',
name: 'Pear',
value: 'pear',
},
],
},
];
// checkbox
const promptList = [
{
type: 'checkbox',
message: '选择颜色:',
name: 'color',
choices: [
{
name: 'red',
},
new inquirer.Separator(), // 添加分隔符
{
name: 'blur',
checked: true, // 默认选中
},
{
name: 'green',
},
new inquirer.Separator('--- 分隔符 ---'), // 自定义分隔符
{
name: 'yellow',
},
],
},
];
// 分页显示 checkbox
const promptList = [
{
type: 'checkbox',
message: '选择颜色:',
name: 'color',
choices: ['red', 'blur', 'green', 'yellow'],
pageSize: 2, // 设置行数
},
];
// password
const promptList = [
{
type: 'password', // 密码为密文输入
message: '请输入密码:',
name: 'pwd',
},
];
// editor
const promptList = [
{
type: 'editor',
message: '请输入备注:',
name: 'editor',
},
];