Inquirer.js 交互式命令行
例子
const inquirer = require('inquirer')
// 设置问题
inquirer.prompt([
{
type: 'input' // 问题类型
name: 'name' // 数据属性名
message: '名称' // 提示信息
default: 'Rogan' // 默认值
}
]).then( answers =>{
// 处理结果
console.log(`你的名字: `, answers.name)
} )
安装
// npm
npm --save-dev inquirer
// yarn
yarn -d inquirer
基本概念
- quesitons // 交互提问, 设置需要交互的内容,例如 输入, 选择等
- answers // 处理回答,设置处理函数
QUESITONS 提问配置
- type 问题类型
- name 数据属性
- message 提示信息
- default 默认值
- choices 选项列表
- validate 校验函数
- filter 多虑器
- transformer 转换器
问题类型
-
input 输入
inquirer.prompt([ { type: 'input', name: 'address', message: '地址', } ])
-
number 数字
{ type: 'number', name: 'phone', message: '手机号' }
-
confirm 是否选择 (y/n)
{ type: 'confirm', name: 'out', message: '是否退出' } // y: 返回 true, n: 返回 false
-
list 选择列表
{ type: 'list', name: 'phone', message: '选择手机品牌', choices: [ { name: '小米', value: 'mi' }, { name: '华为', value: 'huawei' }, { name: '苹果', value: 'apple' } ] }
-
rawlist 带编号的选择列表
{ type: 'rawlist', name: 'num', message: '编号', choices: [ { name: '1', value: 1 }, { name: '2', value: 2 } ], default: 0 // 默认值为列表项编号,起始为 0 }
-
expand 带缩写选择列表
{ type: 'expand', name: 'lang', message: "语言", choices: [ { key: 'j', name: 'javascript', value: 1 }, { key: 'h', name: 'html', value: 2 } ] }
-
checkbox 多选
{ type: 'checkbox', name: 'lang', message: '语言', 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: '内容' }
多步骤嵌套
const conf = [
[
{
type: 'list',
name: 'data',
message: '选择语言',
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 })
网友评论