inquirer.js-——-用户与命令行交互的工具
Inquirerjs
是一个用来实现命令行交互式界面的工具集合。它帮助我们实现与用户的交互式交流,比如给用户提一个问题,用户给我们一个答案,我们根据用户的答案来做一些事情
由于交互的问题种类不同,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默认后缀。
一. 使用
0. 语法结构
1 2 3 4 5 6 7 8 9
| const inquirer = require('inquirer');
const promptList = [ // 具体交互内容 ];
inquirer.prompt(promptList).then(answers => { console.log(answers); // 返回的结果 })
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 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位数字"; } }];
|
效果:
2. confirm
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const promptList = [{ type: "confirm", message: "是否使用监听?", name: "watch", prefix: "前缀" },{ type: "confirm", message: "是否进行文件过滤?", name: "filter", suffix: "后缀", when: function(answers) { // 当watch为true的时候才会提问当前问题 return answers.watch } }];
|
效果:
3. list
1 2 3 4 5 6 7 8 9 10 11 12 13
| const promptList = [{ type: 'list', message: '请选择一种水果:', name: 'fruit', choices: [ "Apple", "Pear", "Banana" ], filter: function (val) { // 使用filter将回答变为小写 return val.toLowerCase(); } }];
|
效果:
4. rawlist
1 2 3 4 5 6 7 8 9 10
| const promptList = [{ type: 'rawlist', message: '请选择一种水果:', name: 'fruit', choices: [ "Apple", "Pear", "Banana" ] }];
|
效果:
5. expand
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 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" } ] }];
|
效果:
6. checkbox
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| const promptList = [{ type: "checkbox", message: "选择颜色:", name: "color", choices: [ { name: "red" }, new inquirer.Separator(), // 添加分隔符 { name: "blur", checked: true // 默认选中 }, { name: "green" }, new inquirer.Separator("--- 分隔符 ---"), // 自定义分隔符 { name: "yellow" } ] }]; // 或者下面这样 const promptList = [{ type: "checkbox", message: "选择颜色:", name: "color", choices: [ "red", "blur", "green", "yellow" ], pageSize: 2 // 设置行数 }];
|
效果:
7. password
1 2 3 4 5
| const promptList = [{ type: "password", // 密码为密文输入 message: "请输入密码:", name: "pwd" }];
|
效果:
8. editor
1 2 3 4 5
| const promptList = [{ type: "editor", message: "请输入备注:", name: "editor" }];
|
效果: