inquirer 用户与命令行交互工具

news2024/11/23 10:40:53

学习脚手架的时候接触到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://www.coloradmin.cn/o/544321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用 Midjourney 绘制你自己的拟人头像?

在元宇宙时代,许多人都使用各种AI应用程序来生成他们自己的头像,其中Midjourney是一个非常流行的选择。然而,成功的先行者可能不愿意透露具体的prompt(提示语),因为他们可能担心自己的创意被其他人抄袭。此…

Talk | 北航助理教授孙庆赟 :图学习里的拓扑不均衡问题初探

本期为TechBeat人工智能社区第497期线上Talk! 北京时间5月17日(周三)20:00,北京航空航天大学计算机学院 助理教授—孙庆赟的Talk将准时在TechBeat人工智能社区开播! 她与大家分享的主题是: “图学习里的拓扑不均衡问题初探 ”,届…

Stream流 - 两个list集合对象属性的合并、对象属性值运算

两个list集合对象属性的合并 合并两个 list<map>, 并将 userId 相同的所有属性合并到一个 map 中 list1中对象的属性:userId、userName list2中对象的属性:userId、gender、age 最总集合中对象的属性:userId、user…

C# | [二进制字符串] 与 [字节数组] 互相转换,一行代码就搞定! - CodePlus系列

C#二进制字符串与字节数组互相转换 文章目录 C#二进制字符串与字节数组互相转换前言示例代码实现思路扩展方法说明引用CodePlus库结束语 前言 开发中有时需要将二进制数据转换为字符串或相反。虽然.NET提供了一些用于二进制数据操作的类库,但是它们的使用有时候会比…

Elasticsearch 安装 X-pack

X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。 ES7.0之后,默认情况下,当安装Elasticsearch时,会安装X-Pack,无需单独再安装。 1.…

编程测试被候选人吐槽了?原因可能是这些

一位前Facebook Tech Lead曾经说过:面试就好像是在第一次约会的时候,就决定是不是要跟对方结婚。 这虽然是个无奈的笑话,但也真实地反映了技术面试中的一个难题:面试官需要在相当有限的时间里,准确地判断候选人的技术…

什么是自然语言处理的机器翻译?

机器翻译(Machine Translation,MT)是一种自然语言处理技术,旨在将一种语言的文本自动翻译成另一种语言。机器翻译是自然语言处理领域的重要应用之一,它可以帮助人们在跨语言交流、文档翻译和信息检索等方面更加便捷和高…

Maven聚合和继承,使用IDEA构建聚合与继承工程

文章目录 1 聚合步骤1:创建一个空的maven项目步骤2:将项目的打包方式改为pom步骤3:pom.xml添加所要管理的项目步骤4:使用聚合统一管理项目 2 继承步骤1:创建一个空的Maven项目并将其打包方式设置为pom步骤2:在子项目中设置其父工程步骤3:优化子项目共有依赖导入问题步骤4:优化子…

企业数据治理内训的好处这么多,赶紧安排!

数据治理是确保数据的质量和完整性的一种方法,这对企业非常重要,因为它们需要准确的数据来做出正确的决策。 学习有效地管理和维护数据 通过内部培训,员工可以学习如何有效地管理和维护数据,从而提高数据质量和可靠性。 帮助企业…

SpringAop的实践应用

使用AOP来对前端传来的对象参数进行 BaseDto中属性的填充 这样就不用每次都去UserThreadLocal中拿了再又往BaseDto中放了 Aspect Component public class UserAspect {Pointcut("annotation(org.springframework.web.bind.annotation.RequestMapping) || annotation(o…

测试将被开发、运维替代?我后悔了!?

记得在求职的时候,面试官经常问我:“为什么要选择软件测试工作?”而我也会经常说一堆自己有的没的优势去应付。 工作这么久了,也不再浮躁,静下心来回忆当初选择软件测试工作的历程,也是对自己职业生涯的一次回顾。 …

每日一题162——重塑矩阵

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。 给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c &…

Conmi的正确答案——Cordova安装并编译Android应用

系统:debian 11 Cordova版本:11.1.0 Cordova的Android平台:10.1.2 当前安卓最新稳定API:33(Android版本列表) 1、安装npm(cordova是基于nodejs开发的) apt install npm -y2、使用n…

OpenCV中的图像处理3.10(八)直方图-寻找、绘制、分析(掩膜)与均衡化

目录 3.10 OpenCV中的直方图3.10.1 直方图--1:寻找、绘制、分析目标理论寻找直方图绘制直方图掩膜的应用其他资源 3.10.2 直方图--2:直方图均衡化目标理论OpenCV中的直方图均衡化CLAHE(对比度有限的自适应直方图均衡)其他资源 翻译…

【笔试强训选择题】Day16.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录…

Linux Qt6 安装教程及错误解决

在Linux环境,通常为Ubuntu,安装Qt开发环境,与Windows安装相比,还是稍显繁琐,需要多做几个步骤。 这里的Ubuntu版本采用的是ubuntu-22.04.2-desktop-amd64,所以,比旧版本会少很多坑,…

今天面了个字节跳动拿35K出来的测试,真是砂纸擦屁股,给我露了一手啊

今年的春招已经结束,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好,他山之石…

现在的00后,实在是太卷了,我们这些老油条都想辞职了......

现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪20K,都快要超过我了。 后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家…

MathType7公式编辑器新版详细介绍下载安装

由于CSDN这边不能发相关的教程等,若仅用于学习体验,请移步,有能力请支持正版。 wx供重浩:创享日记 对话框发送:mathtype 免费获取MathType-win-zh.exe安装包 它是一款用于数学公式编辑和排版的软件。MathType可以在Mi…

能源革命:可持续能源技术如何改变世界

随着全球气候变化日趋严重,能源转型成为解决气候问题和提高全球能源安全合理性的必要措施之一。可持续能源技术因其对环境的友好性和可再生性而成为了当前热点话题。你认为可持续能源技术真的能改变世界吗?一起来说说你的看法吧! 一、你在工…