Inquirer.js 交互式命令行

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Inquirer.js试图为NodeJs做一个可嵌入式的美观的命令行界面。如下图: 提供错误回调 询问操作者问题 ...
    SherHoooo阅读 19,338评论 2 8
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,509评论 0 5
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,967评论 0 38
  • 像一些前端的脚手架,比如 vue-cli 一样,直接在命令行输入一段命令就可以生成一个项目。这是怎么做到的呢? y...
    鱼仔1234阅读 2,502评论 0 12
  • 昨天下午归家,妈妈将将扫好了灶间,这是过年前的除尘了。以前厢屋是瓦房时,老人拿竹枝扎在竹竿头,当掸子用,清罗罗网最...
    江海凝阅读 548评论 0 0