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 相关文章推荐
JS类库Bindows1.3中的内存释放方式分析
Mar 08 Javascript
javascript面向对象之Javascript 继承
May 04 Javascript
五段实用的js高级技巧
Dec 20 Javascript
关于javascript中的typeof和instanceof介绍
Dec 04 Javascript
extjs3 combobox取value和text案例详解
Feb 06 Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
可以浮动某个物体的jquery控件用法实例
Jul 24 Javascript
js实现前面自动补全位数的方法
Oct 10 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
Mar 29 Javascript
jQuery内容选择器与表单选择器实例分析
Jun 28 jQuery
React中的Context应用场景分析
Jun 11 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
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
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
php 常用的系统函数
2017/02/07 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
Python生成器常见问题及解决方案
2020/03/21 Python
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
大学军训自我鉴定
2013/12/15 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
集体婚礼策划方案
2014/02/22 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
Python图像处理之图像拼接
2021/04/28 Python
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS