InqureJS:手搓脚手架必备!让你的命令行交互花里胡哨!

简介: 【10月更文挑战第5天】InqureJS:手搓脚手架必备!让你的命令行交互花里胡哨!

如果想自己做一个脚手架或者在某些时候在 CMD 窗口进行交互,这个时候就可以使用 inquirer.js。

首先npm init 初始化一个文件夹,来测试这个库,然后安装包:

npm install --save inquirer

再在文件夹里面新建一个 app.js,接下来的所有测试均在这个文件里面。

简单功能参数介绍

  • type:表示提问的类型,包括:input、confirm、 list、rawlist、expand、checkbox、password、editor。
  • name: 存储当前输入的值。
  • message:问题的描述。
  • default:默认值。
  • choices:列表选项,在某些type下可用,并且包含一个分隔符(separator);
  • validate:对用户的回答进行校验。
  • filter:对用户的回答进行过滤处理,返回处理后的值。
  • when:根据前面问题的回答,判断当前问题是否需要被回答。
  • pageSize:修改某些type类型下的渲染行数。
  • prefix:修改message默认前缀。
  • suffix:修改message默认后缀。

input输入

一个输入

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"input",
        message:"请输入你的姓名:",
        name:"name",
        default:"大傻子"
    }
]).then(answer=>{
   
    // 用户输入的结果最终会在这里输出
    console.log(answer);
});

运行测试结果:

C:\Users\Administrator\Desktop\propt>node app.js
? 请输入你的姓名: Condoe Hero
{
    name: 'Condoe Hero' }

C:\Users\Administrator\Desktop\propt>

两个输入

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"input",
        message:"请输入你的姓名:",
        name:"name",
        default:"大傻子"
    },
    {
   
        type:"input",
        message:"请输入你的年龄:",
        name:"age",
        default:18
    }
]).then(answer=>{
   
    // 用户输入的结果最终会在这里输出
    console.log(answer);
});

程序运行结果:

C:\Users\Administrator\Desktop\propt>node app.js
? 请输入你的姓名: Condor Hero
? 请输入你的年龄: 18
{
    name: 'Condor Hero', age: 18 }

C:\Users\Administrator\Desktop\propt>

validate验证

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"input",
        message:"请输入你的姓名:",
        name:"name",
        default:"大傻子"
    },
    {
   
        type:"input",
        message:"请输入你的年龄:",
        name:"age",
        default:18,
        validate:(val)=>{
   
            if(val > 10 && val < 120){
   
                return val;
            }else{
   
                return "我猜你绝对不是一个正常人类";
            }
        }
    }
]).then(answer=>{
   
    console.log(answer);
});

测试结果:

C:\Users\Administrator\Desktop\propt>node app.js
? 请输入你的姓名: 大傻子
? 请输入你的年龄: (18) 18
>> 18

confirm确认

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"confirm",
        message:"是否现在监听?",
        name:"watch",
        default:true
    },
    {
   
        type: "confirm",
        message: "是否能看到我取决于上面是否通过?",
        name: "pass",
        suffix: "后缀",
        when: function(answer) {
    // 当watch为true的时候才会到达这步
            return answer.watch//只有我return true才会这个confirm
        }
    }
]).then(answer=>{
   
    console.log(answer);
});

看看三种不同输入结果有啥变化?

前缀和后缀

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"confirm",
        message:"是否现在监听?",
        name:"watch",
        default:true,
        prefix:"☆☆☆☆"//前缀
    },
    {
   
        type: "confirm",
        message: "是否能看到我取决于上面是否通过?",
        name: "pass",
        suffix: "****",//后缀
        when: function(answer) {
    // 当watch为true的时候才会到达这步
            return answer.watch //只有我return true才会这个confirm
        }
    }
]).then(answer=>{
   
    console.log(answer);
});

list 选项组

使用箭头选择

list 一般配合 choices 使用:

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"list",
        message:"请选择一个选项:",
        name:"fruit",
        default:"Apple",
        prefix:"☆☆☆☆",
        suffix:"****",
        choices:[
            "Apple",
            "pear",
            "Banana"
        ],
        filter: function (val) {
    // 使用filter将值变为大写
            return val.toUpperCase();
        }
    }
]).then(answer=>{
   
    console.log(answer);
});

查看动图效果:

使用数字选择

list 改成 rawlist

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"rawlist",
        message:"请选择一个选项:",
        name:"fruit",
        default:"Apple",
        prefix:"☆☆☆☆",
        suffix:"****",
        choices:[
            "Apple",
            "pear",
            "Banana"
        ],
        filter: function (val) {
    // 使用filter将值变为大写
            return val.toUpperCase();
        }
    }
]).then(answer=>{
   
    console.log(answer);
});

使用简写(自动扩展成全写)

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"expand",
        message:"请选择一个颜色:",
        name:"color",
        default:"red",
        choices:[
            {
   
                key : 'R',
                value : "red"
            },
            {
   
                key : 'B',
                value : "blue"
            },
            {
   
                key : 'G',
                value : "green"
            }
        ]
    }
]).then(answer=>{
   
    console.log(answer);
});

自己可以试试按下 h/H 回车的页面是啥。

多选和分隔符

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"checkbox",
        message:"选择一至多种颜色:",
        name:"color",
        choices:[
            {
   
                name : "red"
            },
            new inquirer.Separator(), // 添加分隔符
            {
   
                name : "blue"
            },
            {
   
                name : "green"
            },
            {
   
                name : "pink",
                checked : true//默认
            },
            new inquirer.Separator("--- 分隔符 ---"), // 自定义分隔符
            {
   
                name : "orange"
            }
        ]
    }
]).then(answer=>{
   
    console.log(answer);
});

如果不想自定义还可以:

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"checkbox",
        message:"选择一至多种颜色:",
        name:"color",
        choices:[
            "red",
            "blue",
            "green",
            "pink",
            "orange"
        ]
    }
]).then(answer=>{
   
    console.log(answer);
});

密码

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"password",
        message:"请输入你的密码:",
        name:"pwd"
    }
]).then(answer=>{
   
    console.log(answer);
});

输入数字

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"number",
        message:"请输入数字:",
        name:"num"
    }
]).then(answer=>{
   
    console.log(answer);
});

编辑器

使用首选编辑器打开一个临时文件,用户退出编辑器后,将读取临时文件的内容。首选编辑器可以指定。

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"editor",
        message:"写下你想写的东西:",
        name:"editor"
    }
]).then(answer=>{
   
    console.log(answer);
});

image.png

行数

用来更改显示行数只对list, rawList, expand 或 checkbox有效。

const inquirer = require("inquirer");
inquirer.prompt([
    {
   
        type:"checkbox",
        message:"选择一至多种颜色:",
        name:"color",
        choices:[
            "red",
            "blue",
            "green",
            "pink",
            "orange"
        ],
        pageSize:1
    }
]).then(answer=>{
   
    console.log(answer);
});

只有一行,通过上下方向键来选择:

image.png

相关文章
|
弹性计算 固态存储 大数据
服务器托管/租用和虚拟主机的区别及2023年阿里云服务器配置价格表
阿里云服务器对比主机租用/托管,阿里云虚拟主机和云服务器的区别。服务器托管/租用和虚拟主机的区别,服务器托管/租用和虚拟主机的区别有: 1、服务器托管是用户独享一台服务器,而虚拟主机是多个用户共享一台服务器; 2、服务器托管用户可以自行选择操作系统,而虚拟主机用户只能选择指定范围内的操作系统;服务器托管用户可以自己设置硬盘,创造数千G以上的空间,而虚拟主机空间则相对狭小。 3、服务器托管用户可以选择防火墙以及防病毒设施,大大提高了安全性,并且服务器拥有独立IP地址,当其他站点访问量过大时或者受到攻击时不会影响我们自己的网站;虚拟主机一般情况下是共享IP的,当其中的一个站点发布违规信息、黑
871 0
|
前端开发
组件库的封装之旅(入门scss)
这几天在封装组件库,今天和大家一起使用scss,学习一些scss的基础语法。 先来看一下scss的优势 SCSS (Sass) 有以下几个主要优势: - 可维护性:SCSS 允许使用变量、嵌套、混合、继承等特性,从而使样式表变得更加清晰、可读性增强。 - 更高效:SCSS 允许使用函数、循环等高级特性,使得样式定义更加高效。 - 更易扩展:SCSS 提供了组件化和模块化的技巧,可以更方便地扩展和维护代码。 - 更简单:SCSS 的语法比 CSS 更简洁易懂,允许编写更加简洁的样式表。 - 兼容性:SCSS 可以完全兼容 CSS,可以无缝地使用 再来看一下scss和其他对比 | | S
|
11月前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
|
JavaScript 测试技术 持续交付
在vue中封装第三方组件的标准
在Vue.js项目中,第三方组件库虽能提升开发效率与用户体验,但直接使用可能导致代码结构混乱和样式冲突。为此,本文介绍如何优雅封装第三方组件,包括封装的目的、准备步骤、具体实现方法及处理样式冲突的策略。通过创建专门的封装组件、设计简洁的接口以及有效地管理样式,不仅能统一应用风格,还能显著提高代码的可维护性和可复用性。此外,还提供了封装Element UI Button组件的具体示例,帮助开发者更好地理解封装流程。
|
SQL 监控 关系型数据库
MySQL主从复制详解
在MySQL中,主从架构应该是最基础、最常用的一种架构了。后续的读写分离、多活高可用架构等大多都依赖于主从复制。主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多,笔者也来凑凑热闹,写写这方面的内容吧,同时分享下自己的经验和方法。
1503 0
MySQL主从复制详解
|
Ubuntu Linux 网络安全
1. Linux环境搭建及创建共享文件的方法
1. Linux环境搭建及创建共享文件的方法
463 1
|
JavaScript 前端开发 UED
​基于 vue + element plus + node 实现大文件分片上传,断点续传和秒传的功能!牛哇~
​基于 vue + element plus + node 实现大文件分片上传,断点续传和秒传的功能!牛哇~
element UI【解决方案】消息弹框被对话框遮挡($message消息框被dialog或$alert遮罩)
element UI【解决方案】消息弹框被对话框遮挡($message消息框被dialog或$alert遮罩)
832 3
|
存储 算法 安全
(八)JVM成神路之GC分区篇:G1、ZGC、ShenandoahGC高性能收集器深入剖析
在《GC分代篇》中,我们曾对JVM中的分代GC收集器进行了全面阐述,而在本章中重点则是对JDK后续新版本中研发推出的高性能收集器进行深入剖析。
1098 12