inquirer.js一个用户与命令行交互的工具详解


Posted in Javascript onMay 18, 2019

写在前面:

开始通过npm init 创建package.json的时候就有大量与用户的交互(当然也可以通过参数来忽略输入);而现在大多数工程都是通过脚手架来创建的,使用脚手架的时候最明显的就是与命令行的交互,如果想自己做一个脚手架或者在某些时候要与用户进行交互,这个时候就不得不提到inquirer.js了。

零. 介绍

由于交互的问题种类不同,inquirer为每个问题提供很多参数:

  • type:表示提问的类型,包括:input, confirm, list, rawlist, expand, checkbox, password, editor;
  • name: 存储当前问题回答的变量;
  • message:问题的描述;
  • default:默认值;
  • choices:列表选项,在某些type下可用,并且包含一个分隔符(separator);
  • validate:对用户的回答进行校验;
  • filter:对用户的回答进行过滤处理,返回处理后的值;
  • transformer:对用户回答的显示效果进行处理(如:修改回答的字体或背景颜色),但不会影响最终的答案的内容;
  • when:根据前面问题的回答,判断当前问题是否需要被回答;
  • pageSize:修改某些type类型下的渲染行数;
  • prefix:修改message默认前缀;
  • suffix:修改message默认后缀。

上面的属性(除transformer外)在下面都有对应使用。

一. 使用

0. 语法结构

const inquirer = require('inquirer');

const promptList = [
  // 具体交互内容
];

inquirer.prompt(promptList).then(answers => {
  console.log(answers); // 返回的结果
})

1. input

const promptList = [{
  type: 'input',
  message: '设置一个用户名:',
  name: 'name',
  default: "test_user" // 默认值
},{
  type: 'input',
  message: '请输入手机号:',
  name: 'phone',
  validate: function(val) {
    if(val.match(/\d{11}/g)) { // 校验位数
      return val;
    }
    return "请输入11位数字";
  }
}];

效果:

inquirer.js一个用户与命令行交互的工具详解

2. confirm

const promptList = [{
  type: "confirm",
  message: "是否使用监听?",
  name: "watch",
  prefix: "前缀"
},{
  type: "confirm",
  message: "是否进行文件过滤?",
  name: "filter",
  suffix: "后缀",
  when: function(answers) { // 当watch为true的时候才会提问当前问题
    return answers.watch
  }
}];

效果:

inquirer.js一个用户与命令行交互的工具详解 

inquirer.js一个用户与命令行交互的工具详解

3. list

const promptList = [{
  type: 'list',
  message: '请选择一种水果:',
  name: 'fruit',
  choices: [
    "Apple",
    "Pear",
    "Banana"
  ],
  filter: function (val) { // 使用filter将回答变为小写
    return val.toLowerCase();
  }
}];

效果:

inquirer.js一个用户与命令行交互的工具详解 

inquirer.js一个用户与命令行交互的工具详解

4. rawlist

const promptList = [{
  type: 'rawlist',
  message: '请选择一种水果:',
  name: 'fruit',
  choices: [
    "Apple",
    "Pear",
    "Banana"
  ]
}];

效果:

inquirer.js一个用户与命令行交互的工具详解

5. expand

const promptList = [{
  type: "expand",
  message: "请选择一种水果:",
  name: "fruit",
  choices: [
    {
      key: "a",
      name: "Apple",
      value: "apple"
    },
    {
      key: "O",
      name: "Orange",
      value: "orange"
    },
    {
      key: "p",
      name: "Pear",
      value: "pear"
    }
  ]
}];

效果:

inquirer.js一个用户与命令行交互的工具详解 

inquirer.js一个用户与命令行交互的工具详解

6. checkbox

const promptList = [{
  type: "checkbox",
  message: "选择颜色:",
  name: "color",
  choices: [
    {
      name: "red"
    },
    new inquirer.Separator(), // 添加分隔符
    {
      name: "blur",
      checked: true // 默认选中
    },
    {
      name: "green"
    },
    new inquirer.Separator("--- 分隔符 ---"), // 自定义分隔符
    {
      name: "yellow"
    }
  ]
}];
// 或者下面这样
const promptList = [{
  type: "checkbox",
  message: "选择颜色:",
  name: "color",
  choices: [
    "red",
    "blur",
    "green",
    "yellow"
  ],
  pageSize: 2 // 设置行数
}];

效果:

inquirer.js一个用户与命令行交互的工具详解 

inquirer.js一个用户与命令行交互的工具详解

7. password

const promptList = [{
  type: "password", // 密码为密文输入
  message: "请输入密码:",
  name: "pwd"
}];

效果:

inquirer.js一个用户与命令行交互的工具详解

8. editor

const promptList = [{
  type: "editor",
  message: "请输入备注:",
  name: "editor"
}];

效果:

inquirer.js一个用户与命令行交互的工具详解 

inquirer.js一个用户与命令行交互的工具详解

写在后面:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript - HTML的request类
Jan 09 Javascript
解析JavaScript中delete操作符不能删除的对象
Dec 03 Javascript
Jquery操作js数组及对象示例代码
May 11 Javascript
jquery中radio checked问题
Mar 16 Javascript
js实现类似jquery里animate动画效果的方法
Apr 10 Javascript
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
May 12 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Feb 19 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
jQuery联动日历的实例解析
Dec 02 Javascript
JS实现Ajax的方法分析
Dec 20 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 Javascript
webpack 代码分离优化快速指北
May 18 #Javascript
如何实现小程序tab栏下划线动画效果
May 18 #Javascript
微信小程序结合Storage实现搜索历史效果
May 18 #Javascript
Fetch超时设置与终止请求详解
May 18 #Javascript
微信小程序实现搜索历史功能
Mar 26 #Javascript
微信小程序云开发修改云数据库中的数据方法
May 18 #Javascript
小程序云开发教程如何使用云函数实现点赞功能
May 18 #Javascript
You might like
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
中东人咖啡哲学
2021/03/03 咖啡文化
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
css配合jquery美化 select
2013/11/29 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
复习Python中的字符串知识点
2015/04/14 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
会计电算化个人自我评价
2013/11/17 职场文书
小学生红领巾广播稿
2014/01/21 职场文书
机电一体化专业求职信
2014/07/22 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
python 多态 协议 鸭子类型详解
2021/11/27 Python
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript