node.js 命令行交互工具(最新版) inquirer.js 实用教程

简介: node.js 命令行交互工具(最新版) inquirer.js 实用教程

inquirer 官网

https://www.npmjs.com/package/inquirer

创建 inquirer 的演示项目

  1. 新建文件夹 inquirerDemo
  2. 在 inquirerDemo文件夹中打开命令行,执行
npm init -y

会自动生成 package.json

  1. 安装 inquirer
cnpm install --save inquirer

cnpm 的朋友先执行 npm i cnpm

  1. 在package.json中添加项目启动脚本
"start": "node index.js",


  1. 在package.json中添加对ES6模块化规范的支持
    以便代码中可以使用 import 导入依赖
"type": "module",

此时 package.json 的完整代码如下:

(当时最新的 “inquirer” 版本为 “^9.0.2”)

{
  "name": "inquirerdemo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "inquirer": "^9.0.2"
  }
}

  1. 在文件夹 inquirerDemo中创建文件 index.js ,内容为:
import inquirer from "inquirer";

inquirer
  .prompt([
    {
      type: "input",
      message: "请输入您的姓名:",
      name: "name",
    },
  ])
  .then((answers) => {
    console.log(answers);
  });

  1. 启动项目
npm run start

输入姓名会回车,此处以我的昵称朝阳为例:

项目创建并运行成功!

导入 inquirer 依赖

import inquirer from "inquirer";

提示用户输入 input

inquirer
  .prompt([
    {
      type: "input", // 交互类型
      message: "请输入您的姓名:", // 引导词
      name: "name", // 自定义的字段名
      default: "朝阳", // 设定默认值
    },
  ])
  .then((answers) => {
    // 打印用户输入的内容
    console.log(answers);
  });

  • 对输入内容进行校验
inquirer
  .prompt([
    {
      type: "input",
      message: "请输入一个数字:",
      name: "num",
      validate: function (val) {
        const done = this.async();
        if (val > 18) {
          done(null, true);
        }
        done("数字不能小于18!");
      },
    },
  ])
  .then((answers) => {
    // 打印用户输入的内容
    console.log(answers);
  });

与用户确认 confirm

inquirer
  .prompt([
    {
      type: "confirm", // 交互类型 -- 确认
      message: "是否男性?", // 引导词
      name: "genderConfirm", // 自定义的字段名
      prefix: "系统管理员:", // 前缀
      suffix: "必答题", // 后缀
    },
  ])
  .then((answers) => {
    // 打印用户输入的内容
    console.log(answers);
  });

无序单选 list

inquirer
  .prompt([
    {
      type: "list", // 交互类型 -- 单选(无序)
      message: "请选择一种水果:", // 引导词
      name: "fruit", // 自定义的字段名
      choices: ["苹果", "梨子", "香蕉"], // 选项列表
    },
  ])
  .then((answers) => {
    // 打印结果
    console.log(answers);
  });

上下方向键可以调整选项,回车键确认选择

有序单选 rawlist

inquirer
  .prompt([
    {
      type: "rawlist", // 交互类型 -- 有序单选
      message: "请选择一种水果:", // 引导词
      name: "fruit", // 自定义的字段名
      choices: ["苹果", "梨子", "香蕉"], // 选项列表
    },
  ])
  .then((answers) => {
    // 打印结果
    console.log(answers);
  });

可直接输入序号,如3,来选择香蕉

也可以上下方向键可以调整选项,回车键确认选择

带索引的单选 expand

inquirer
  .prompt([
    {
      type: "expand", // 交互类型 -- 带索引的单选
      message: "请选择一种水果:", // 引导词
      name: "fruit", // 自定义的字段名
      // 选项列表
      choices: [
        {
          key: "a",
          name: "苹果",
          value: "apple",
        },
        {
          key: "O",
          name: "橘子",
          value: "orange",
        },
        {
          key: "p",
          name: "梨子",
          value: "pear",
        },
      ],
    },
  ])
  .then((answers) => {
    // 打印结果
    console.log(answers);
  });

输入 a会选中苹果

输入 o会选中橘子

输入 p会选中梨子

输入 h后回车会显示所有选项

若直接回车,也会显示所有选项

输入正确的索引值回车即可得到最终结果

多选 checkbox

inquirer
  .prompt([
    {
      type: "checkbox", // 交互类型 -- 多选
      message: "选择颜色:", // 引导词
      name: "color", // 自定义的字段名
      // 选项列表
      choices: [
        {
          name: "红色",
        },
        new inquirer.Separator(), // 默认分隔符
        {
          name: "蓝色",
          checked: true, // 默认选中
        },
        {
          name: "绿色",
        },
        new inquirer.Separator("--- 自定义的分隔符 ---"), // 自定义分隔符
        {
          name: "黄色",
        },
      ],
    },
  ])
  .then((answers) => {
    // 打印结果
    console.log(answers);
  });

默认蓝色已选中

按空格键进行选中

上下方向键可以调整选项前的箭头 >

回车键打印最终选择结果

  • 可滚动的多选
inquirer
  .prompt([
    {
      type: "checkbox", // 交互类型 -- 多选
      message: "选择颜色:", // 引导词
      name: "color", // 自定义的字段名
      // 选项列表
      choices: ["红色", "蓝色", "绿色", "黄色"],
      pageSize: 2, // 设置选项展示的行数
    },
  ])
  .then((answers) => {
    // 打印结果
    console.log(answers);
  });

上下方向键可以调整选项前的箭头 >,超出行数的选项会循环轮播展示

输入密码 password

inquirer
  .prompt([
    {
      type: "password", // 交互类型 -- 密码
      message: "请输入密码:", // 引导词
      name: "pwd", // 自定义的字段名
    },
  ])
  .then((answers) => {
    // 打印结果
    console.log(answers);
  });

输入密码时,密码的输入过程不可见

输完密码按回车后,打印输入的密码

编辑器(可多行输入) editor

inquirer
  .prompt([
    {
      type: "editor", // 交互类型 -- 编辑器(可多行输入)
      message: "请输入备注:", // 引导词
      name: "content", // 自定义的字段名
    },
  ])
  .then((answers) => {
    // 打印结果
    console.log(answers);
  });

按回车后,会创建并打开一个临时记事本

输入任意内容后,关闭记事本,会打印出输入的内容

 

目录
相关文章
|
1天前
|
JavaScript
TS,编写TS文件,编写hello.ts文件,cmd下打开终端,输入tsc hello.ts会生成一个hello.js文件,简化命令,npm i -g ts-node,ts-node hello.ts
TS,编写TS文件,编写hello.ts文件,cmd下打开终端,输入tsc hello.ts会生成一个hello.js文件,简化命令,npm i -g ts-node,ts-node hello.ts
前后端数据交互,request.js文件添加拦截器的写法,数据请求失败后的固定写法
前后端数据交互,request.js文件添加拦截器的写法,数据请求失败后的固定写法
|
2天前
|
开发框架 监控 JavaScript
企业级node.js开发框架 【egg.js】 实用教程
企业级node.js开发框架 【egg.js】 实用教程
7 0
|
2天前
|
JavaScript 数据安全/隐私保护
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
3 0
|
22天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园竞赛管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园竞赛管理系统附带文章源码部署视频讲解等
168 63
|
9天前
|
XML 缓存 JavaScript
一篇文章讲明白JS模板引擎之JST模板
一篇文章讲明白JS模板引擎之JST模板
11 2
|
22天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园食堂订餐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园食堂订餐系统附带文章源码部署视频讲解等
52 10
|
22天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园失物招领网站附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园失物招领网站附带文章源码部署视频讲解等
31 9
|
22天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园生活服务平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园生活服务平台附带文章源码部署视频讲解等
38 9