Inquirer.js 交互式命令行
例子
const inquirer = require('inquirer')
// 設(shè)置問題
inquirer.prompt([
{
type: 'input' // 問題類型
name: 'name' // 數(shù)據(jù)屬性名
message: '名稱' // 提示信息
default: 'Rogan' // 默認(rèn)值
}
]).then( answers =>{
// 處理結(jié)果
console.log(`你的名字: `, answers.name)
} )
安裝
// npm
npm --save-dev inquirer
// yarn
yarn -d inquirer
基本概念
- quesitons // 交互提問, 設(shè)置需要交互的內(nèi)容铝穷,例如 輸入, 選擇等
- answers // 處理回答佳魔,設(shè)置處理函數(shù)
QUESITONS 提問配置
- type 問題類型
- name 數(shù)據(jù)屬性
- message 提示信息
- default 默認(rèn)值
- choices 選項(xiàng)列表
- validate 校驗(yàn)函數(shù)
- filter 多慮器
- transformer 轉(zhuǎn)換器
問題類型
-
input 輸入
inquirer.prompt([ { type: 'input', name: 'address', message: '地址', } ])
-
number 數(shù)字
{ type: 'number', name: 'phone', message: '手機(jī)號(hào)' }
-
confirm 是否選擇 (y/n)
{ type: 'confirm', name: 'out', message: '是否退出' } // y: 返回 true, n: 返回 false
-
list 選擇列表
{ type: 'list', name: 'phone', message: '選擇手機(jī)品牌', choices: [ { name: '小米', value: 'mi' }, { name: '華為', value: 'huawei' }, { name: '蘋果', value: 'apple' } ] }
-
rawlist 帶編號(hào)的選擇列表
{ type: 'rawlist', name: 'num', message: '編號(hào)', choices: [ { name: '1', value: 1 }, { name: '2', value: 2 } ], default: 0 // 默認(rèn)值為列表項(xiàng)編號(hào)曙聂,起始為 0 }
-
expand 帶縮寫選擇列表
{ type: 'expand', name: 'lang', message: "語(yǔ)言", choices: [ { key: 'j', name: 'javascript', value: 1 }, { key: 'h', name: 'html', value: 2 } ] }
-
checkbox 多選
{ type: 'checkbox', name: 'lang', message: '語(yǔ)言', choices: [ { name: 'javascript', value: 1 }, { name: 'php', value: 2 }, { name: 'go', value: 3 }, ], }
-
password 密碼
{ type: 'password', name: 'pw', message: '密碼', }
-
editor 文本編輯器
{ type: 'editor', name: 'content', message: '內(nèi)容' }
多步驟嵌套
const conf = [
[
{
type: 'list',
name: 'data',
message: '選擇語(yǔ)言',
choices: [
{
name: 'javascript', value: 1
},
{
name: 'go', value: 2
},
]
}
],
[
{
type: 'list',
name: 'data',
message: '工作類型',
choices: [
{
name: 'web', value: 3,
},
{
name: 'node', value: 3
}
]
}
],
[
{
type: 'list',
name: 'data',
message: '工作類型',
choices: [
{
name: 'docker', value: 3
},
{
name: 'block chian', value: 3
}
]
}
],
[
{
type: 'number',
name: 'data',
message: '期望薪資',
}
]
]
let step = 0;
function select({data}){
if(step < 3){
step++
return inquirer.prompt(conf[data]).then(select)
}else{
console.log('end: ', data)
}
}
select({ data: step })