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 IE 浏览器判定代码
Mar 21 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
Mar 04 Javascript
JavaScript回调(callback)函数概念自我理解及示例
Jul 04 Javascript
jquery中trigger()无法触发hover事件的解决方法
May 07 Javascript
JS正则表达式判断有效数实例代码
Mar 13 Javascript
js HTML5 canvas绘制图片的方法
Sep 08 Javascript
Vue filter介绍及其使用详解
Oct 21 Javascript
JS实现简单获取最近7天和最近3天日期的方法
Apr 18 Javascript
解决element UI 自定义传参的问题
Aug 22 Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 Javascript
JavaScript中引用vs复制示例详析
Dec 06 Javascript
详解ES6中的Map与Set集合
Mar 22 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
php 接口类与抽象类的实际作用
2009/11/26 PHP
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
Javascript面向对象编程
2012/03/18 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
Python中处理unchecked未捕获异常实例
2015/01/17 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
python实现FTP循环上传文件
2020/03/20 Python
Python自省及反射原理实例详解
2020/07/06 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
网络维护中文求职信
2014/01/03 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript