inquirer 用户与命令行交互工具

news/2024/7/5 4:02:03

学习脚手架的时候接触到inquirer ,用来创建用户与命令行交互工具,使用方式如下:

1、安装

npm i -S inquirer

2、所有type使用范例

var inquirer = require('inquirer');
 
const questions = [
  {
    type: 'confirm',
    name: 'order',
    message: '您好,需要点餐吗?',
    default: true,
  },
  {
    type: 'number',
    name: 'amount',
    message: '你们几个人?',
    default: 1,
  },
  {
    type: 'list',
    name: 'mainFood',
    message: '主食需要吃点什么?',
    choices: ['Rice', 'Noodle', 'Pizza'],
    // 对用户的回答进行转换,返回转换过的结果
    filter(val) {
      return val.toLowerCase();
    },
    default: 'Pizza', // 注意:default 值为转化前的值
  },
  {
    type: 'list',
    name: 'smell',
    message: '需要什么口味的?',
    choices: [
      {
        key: 0,
        name: "辣",
        value: "hot"
      },
      {
        key: 1,
        name: "甜",
        value: "sweet"
      },
    ],
  },
  {
    type: 'rawlist',
    message: 'Pizza 要多大尺寸的?',
    name: 'size',
    choices: ['5寸', '6寸', '7寸'],
    when(answers) {
      return answers.mainFood === 'pizza';
    },
    default: 1, // default 是选项在 choices 数组中的索引
  },
  {
    type: 'checkbox',
    name: 'menu',
    message: '想要吃点什么菜?',
    choices: [
      {
        name: '东坡肉',
        checked: true,
      },
      {
        name: '剁椒鱼头',
      },
      {
        name: '法式鹅肝',
        disabled: '卖完了',
      },
      {
        name: '西红柿炒鸡蛋',
      },
    ],
  },
  {
    type: 'expand',
    name: 'drinks',
    message: '饮料喝点什么?',
    choices: [
      {
        key: 'a', // key 必须是单个小写的字符
        name: '小麦茶',
        value: 'XiaoMaiCha',
      },
      {
        key: 'b',
        name: '雪碧',
        value: 'XueBi',
      },
      {
        key: 'c',
        name: '果粒橙',
        value: 'GuoLiCheng',
      },
    ],
    default: 0, // default 值必须是选项在 choices 数组中的索引
  },
  {
    type: 'input',
    name: 'vipCard',
    message: "请输入会员卡号",
    validate(value) {
      const pass = /^\d{8}$/.test(value);
      if (pass) {
        return true;
      }
 
      return '会员卡号是8位纯数字!';
    },
  },
  {
    type: 'password',
    name: 'pwd',
    message: '请输入会员卡密码',
    mask: '*',
    validate(value) {
      let valid = value.length === 6;
 
      return valid || '密码必须是6位!';
    },
  },
  {
    type: 'editor',
    name: 'suggest',
    message: '您对本店有什么建议吗?',
  },
];
 
inquirer
  .prompt(questions)
  .then((answers) => {
    console.log(answers)
  })
  .catch((error) => {
    if (error.isTtyError) {
      // Prompt couldn't be rendered in the current environment
    } else {
      // Something else went wrong
    }
  });

根据用户选择的选项打印出来的answers打印结果如下

 2、inquirer.prompt() 语法分析

inquirer.prompt() 里的数组可以定义问题,每个数组元素是一个对象,一个数组元素代表一个问题。每个问题对象可以定义的属性有:

  • type:(String)提示的类型,默认 input,可选值有:input, number, confirm, list, rawlist, expand, checkbox, password, editor
  • message:(String|Function)问题的描述
  • name:(String)在 answers 对象里的 key
  • choices: (Array|Function)选项
  • default: (String|Number|Boolean|Array|Function)  用户没有回答时的默认值
  • filter: (Function) 对用户的回答进行转换,返回转换过的结果给 answers
  • when: (Function, Boolean) 根据前面用户回答的答案来判断要不要显示当前问题
  • validate: (Function) 对用户的回答进行校验
  • transformer:对用户回答的显示效果进行处理(如:修改回答的字体或背景颜色),但不会影响最终的答案的内容
  • pageSize:修改某些type类型下的渲染行数
  • prefix:修改message默认前缀
  • suffix:修改message默认后缀

type: 'confirm'

type 为 confirm 时,需要设置 type, name, message[, default] 属性,default 必须为 Boolean。默认值会显示为大写,比如下图的“Y”。

type: 'number'

 type: 'list'

type 为 list 时,需要设置 type, name, message, choices[, default, filter, loop] 属性,default 可以是 choices 数组中的索引或者值。

 type: 'rawlist'

type 为 rawList 时,需要设置 type, name, message, choices[, default, filter, loop] 属性,default  只能是 choices 数组中的索引。

type: 'checkbox'

type 为 checkbox 时,需要设置 type, name, message, choices[, filter, validate, default, loop]属性,default 需要是 choices 里 value 组成的数组。

choices 数组元素是一个必须带有 name 属性的对象,设置了 checked: true 的选项默认会被选中。disabled 属性值为转成 Boolean 为 true 的选项会被禁止选中,当 disabled 的值为 String 时,这个值会被显示在选项后面。 

type: 'expand'

type 为 expand 时,需要设置 type, name, message, choices[, default] 属性。choices 数组元素为对象,每个对象必须包含 key, name, value 属性。默认选项的 key 会被大写,比如如下的 A。 

h 选项会被默认添加,在没有设置默认值时回车或者输入 h 都会列出 help 帮助列表如下:

type: 'input'

type 为 input 时,需要设置 type, name, message[, default, filter, validate, transformer] 属性。

type: 'password' 

type 为 password 时,需要设置 type, name, message, mask[, default, filter, validate] 属性。mask 是替换密码的字符。

type: 'editor'

type 为 editor 时,需要设置 type, name, message[, default, filter, validate, postfix] 属性。

回车的时候进入 vim 模式进行编辑。

validate 验证答案

验证失败命令行会有红色提示,进程不退出,可以继续输入答案

Separator 选项分隔符

分隔符可以添加到任意 choices 数组里。

choices: [ 'apple', new inquirer.Separator('------'), 'orange' ]


http://lihuaxi.xjx100.cn/news/1149518.html

相关文章

ES6中Proxy的使用

1、概述 Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来…

文件删了怎么找回来

在电脑使用过程中,我们难免会误删一些重要的文件。当我们发现误删后,有时会感到非常焦虑,不知道文件删了怎么找回来?可以在这里看看,本文将介绍一些常见的找回文件的方法,帮助大家解决这一问题。 一、使用系统自带的回…

Java的枚举类型用法介绍

1 背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表示夏天,3表示秋天,4表示冬天。 public c…

刚测完Bug,就被开除了····

我曾在一家软件公司担任功能测试工程师,经历了三年的工作。在这段时间里,我积累了丰富的测试经验和技能,在团队中也有着不错的表现。然而,最终我却被公司辞退了。 在我入职时,公司还没有建立完善的测试流程和标准。我的…

Git宝典

版本管理工具介绍 现在比较流行的版本管理工具是git,但是实际上git是近几年才发展起来的,可能有一些老的项目,还在用一些老的软件,如svn 版本管理发展简史 SVN(SubVersion) 工作流程 SVN是集中式版本控…

前端面试整理5

目录 1.父子组件生命周期执行顺序? 2.localstorage.sessionstorage,cookie的区别? 3.js截取字符串方案? 4.Webpack的优化流程? 5.协商缓存和强缓存? 6.静态资源是强缓存,会不会向服务器发请求&#x…

深入探究Android线程:理解与应用

在Android应用程序中,线程是关键的概念之一。本文将详细介绍Android线程的概念、多线程编程的必要性以及在应用程序中正确使用线程的方法。我们将深入探讨Android线程模型、主线程和后台线程的区别,以及如何处理线程间通信和线程安全性的问题&#xff0c…

在已有VPC中创建EKS集群

1. 美东1 默认配置 创建在master-vcp中节点放在两上Public Subnet上,便于SSH登录维护Attach上默认安全组sg-071f18562f41b5804,打通各种常规的网络访问规则cat << EOF > master-eks-cluster.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata:name…