【每日一包0024】inquirer

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

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;github

name:接受答案的key(String),當問題被回答,答案會以對象形式返回;promise

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的第一個參數爲近期回答的答案構成的對象;ui

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的第一個參數爲近期回答的答案code

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)orm

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();
相關文章
相關標籤/搜索