2

[github地址:https://github.com/ABCDdouyae...]

inquirer

好用的交互命令行工具

方法

1.inquirer.prompt(questions) -> promise 启动提示界面并返回promise
const req = require('inquirer');
req.prompt([{
    type: "string",
    message:'请输入您的名字',
    name: 'name'
}]).then(as=>{
    console.log('您的名字是:'+as.name)
}).catch(err=>{console.log(err)})

/**
 ? 请输入您的名字 小明
您的名字是:小明
 */
2.inquirer.registerPrompt(name, prompt) 在name下面注册提示插件
3.inquirer.createPromptModule() -> prompt function

提问的问题对象属性

type:提示的类型(String),默认为input,也可以设置为input, confirm, list, rawlist, expand, checkbox, password, editor;

name:接受答案的key(String),当问题被回答,答案会以对象形式返回;

message:用于设置提问的问题(String|Function),如果设置为function,该function的第一个参数为近期回答的答案构成的对象;

req.prompt([{
     type:'input',
     message:'请输入你的名字?',
     name:"name",
 },
    {
     type:'input',
     message: function(e){
         return `${e.name},请输入您的年龄?`
     },
     name: 'age'
 }]).then(as=>{
     console.log(as)
 })

 /**
? 请输入你的名字? 小明
? 小明,请输入您的年龄? 12
{ name: '小明', age: '12' }
  */

default:如果用户没有回答,默认值存在则为该问题赋值默认答案(String|Number|Boolean|Array|Function),如果设置为function,该function的第一个参数为近期回答的答案构成的对象;

choices:用于设置选择的列表(Array|Function),如果设置为function,该function的第一个参数为近期回答的答案构成的对象;

req.prompt([{
    type: "list",
    message:'请选择性别',
    name: 'name',
    choices: ['男', '女']
}]).then(as=>{
    console.log(as)
}).catch(err=>{console.log(err)})

/**
? 请选择性别 女
{ name: '女' }
 */

validate:用来校验输入的答案是否符合要求(Function),该function的第一个参数为近期回答的答案,通过返回boolean来判断是否校验通过,如果未通过则重新进入输入界面;

req.prompt([{
    type: "input",
    message:'请输入您的电话号码?',
    name: 'mobile',
    validate:function(e){
        if(e.match(/^[1][2,3,5,6,7,8][0-9]{9}$/)){return true}
        console.log('\n您输入的电话号码格式不对,请重新输入')
        return false;
    }
}]).then(as=>{
    console.log(as)
}).catch(err=>{console.log(err)})

/**
? 请输入您的电话号码? 110
您输入的电话号码格式不对,请重新输入
? 请输入您的电话号码? 16619928930
{ mobile: '16619928930' }
 */

filter:对输入的答案进行处理后返回新的答案(Function),该function的第一个参数为近期回答的答案

req.prompt([{
    type: "checkbox",
    message:'请选择性别?',
    name: 'sex',
    choices:['男', '女'],
    filter:function(e){
        let sex = '';
        e === '女' ? sex = 'woman' : sex = 'man';
        return sex;
    }
}]).then(as=>{
    console.log(as)
}).catch(err=>{console.log(err)})

/**
 ❯◯ 男
  ◯ 女
  { sex: 'man' }
 */

transformer:对用户的问题进行转换(!!!!我没看懂这个是干嘛的,有看懂的求指教)(Function)

when:用来设定这个问题是否有必要被提问(Function),返回boolean,返回false表示忽略这个问题,该function的第一个参数为近期回答的答案

 req.prompt([{
    type: "list",
    message:'请问你结婚了吗?',
    name: 'isMarry',
    choices:['结婚', '未结婚'],
},{
    type: "input",
    message:'请问你孩子多大了?',
    name: 'age',
    when:function(e){
     return e.isMarry === '结婚'
    }
}]).then(as=>{
    console.log(as)
}).catch(err=>{console.log(err)})
/**
? 请问你结婚了吗? 未结婚
{ isMarry: '未结婚' } 
 */

pageSize:设置选择列表每页显示的可选项数目(Number)

prefix:给问题前面添加内容(String)

req.prompt([{
    type: "string",
    message:'请输入您的名字',
    name: 'name',
    prefix:'您好'
}]).then(as=>{
    console.log('您的名字是:'+as.name)
}).catch(err=>{console.log(err)})
/**
 您好 请输入您的名字 ww
 您的名字是:ww
 */

suffix:给问题后面添加内容(String)

设置新的UI显示

var ui = new req.ui.BottomBar();

// During processing, update the bottom bar content to display a loader
// or output a progress bar, etc
ui.updateBottomBar('new bottom bar content');

req.prompt([{
    type: "string",
    message:'请输入您的名字',
    name: 'name',
    prefix:'您好'
}]).then(as=>{
    console.log('您的名字是:'+as.name)
}).catch(err=>{console.log(err)})

采用迭代器模式

const req = require('inquirer');
const Rx = require('rxjs');
var prompts = new Rx.Subject();
req.prompt(prompts);

prompts.next({
    type: "string",
    message:'请输入您的名字',
    name: 'name',
});
prompts.next({
    type: "string",
    message:'请输入您的性别',
    name: 'sex',
});

prompts.complete();

王炜
170 声望20 粉丝

如果注定要承受痛苦,就把痛苦当做一种磨练;既然一切不可避免,就让暴风雨来的更猛烈些吧!