node自动化构建(二)--inquirer

876 阅读2分钟

这是我参与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的作用在于锦上添花,能让你的项目升华一个层次,让人使用起来更加舒服。