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 给汉字排序实例代码
Jun 28 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
Sep 15 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
Apr 29 Javascript
js中跨域方法原理详解
Jul 19 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
Apr 06 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
Dec 16 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
理解javascript async的用法
Aug 22 Javascript
javascript实现循环广告条效果
Dec 12 Javascript
javascript填充默认头像方法
Feb 22 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
Jun 08 Javascript
vue.js实现照片放大功能
Jun 23 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新手上路(十四)
2006/10/09 PHP
PHP取进制余数函数代码
2012/01/19 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
php生成验证码函数
2015/10/20 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
react 生命周期实例分析
2020/05/18 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
Python datetime包函数简单介绍
2019/08/28 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
极简的HTML5模版
2015/07/09 HTML / CSS
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
高一化学教学反思
2014/02/05 职场文书
一岗双责责任书
2014/04/15 职场文书
2014年四风问题个人对照自查剖析材料
2014/09/15 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
python基础之模块的导入
2021/10/24 Python