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 相关文章推荐
使用jquery插件实现图片延迟加载技术详细说明
Mar 12 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
Sep 29 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
May 11 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
Mar 05 Javascript
Javascript调用函数方法的几种方式介绍
Mar 20 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
Sep 14 Javascript
详解在express站点中使用ejs模板引擎
Sep 21 Javascript
小程序图片剪裁加旋转的示例代码
Jul 10 Javascript
微信小程序实现文字无限轮播效果
Dec 28 Javascript
vue quill editor 使用富文本添加上传音频功能
Jan 14 Javascript
JavaScript实现滑块验证解锁
Jan 07 Javascript
react项目从新建到部署的实现示例
Feb 19 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 防注入函数(格式化数据)
2011/08/08 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
基于jquery的一个图片hover的插件
2010/04/24 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
JS实现页面侧边栏效果探究
2021/01/08 Javascript
python微信公众号之关键词自动回复
2018/06/15 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书
教师节商场活动方案
2014/02/13 职场文书
教研活动总结
2014/04/28 职场文书
宣传标语大全
2014/07/01 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python