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

相关文章
|
1天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1517 4
|
28天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
5天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
481 17
|
1天前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
179 1
|
8天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
8天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
442 4
|
7天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
313 2
|
23天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
25天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2607 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析