NodeJs命令行交互

2 篇文章 0 订阅
本文介绍了在Node.js开发中使用内置模块readline、第三方库readline-sync和inquirer进行命令行交互的不同方法,包括获取用户输入、列表选择以及定制化UI。重点对比了这些工具的优缺点和功能特性。
摘要由CSDN通过智能技术生成

描述

  • 什么时命令行交互? 在开发程序时有时候需要获得用户的输入,或者给定一个选择列表让用户进行选择。类似前端工程化时创建vue或者react或者vite创建项目时让你选择的一些配置信息。

命令行交互的几种显示方案

  • nodejs内置模块实现,模块:readline ,缺点是样式单不灵活,好处就是不用安装因为是内置的。
  • 第三方模块实现,模块(需要先安装) readline-sync 该模块提供了输入及列表选择及其他一些功能。,但依然还是样式比较单一。
  • 第三方包 模块(需要安装 并且安装指定版本 npm install --save inquirer@^8.0.0) inquirer 该包提供了强大的功能及比较美观的ui。

代码实现

内置模块 readline 实现
/**
 * 获得命令行的输入
 */

function getTerminalInput (prompt) {
  return new Promise((resolve, reject) => {
    // 内置模块
    const readline = require('readline').createInterface({
      input: process.stdin,
      output: process.stdout,
    });
    readline.question(prompt || 'Input Msg', value => {
      resolve(value);
      readline.close();
    });
  })
}

getTerminalInput('you is name: ').then(name => console.log(`is name:${name}`));

  • 看看效果
    在这里插入图片描述
    在这里插入图片描述
使用第三方包 readline-sync来实现
获得命令行输入
const readlineSync = require("readline-sync")
function getInputVlaue () {
  var userName = readlineSync.question('you is name? ');
  console.log('Hi ' + userName + '!');
}
getInputVlaue()
  • 输入效果就不展示了,和上面差不多
列表选择
const readlineSync = require("readline-sync")
function getSelectItem () {
  const animals = ["Lion", "Elephant", "Crocodile", "Giraffe", "Hippo"]
  const index = readlineSync.keyInSelect(animals, "Which animal?");
  console.log("Ok, " + animals[index] + " goes to your room.");
}

getSelectItem()
  • 效果如下
    在这里插入图片描述
    在这里插入图片描述
类似滑块范围的UI
  • 按Z键向左滑动,按X键向右滑动,按空格键退出
function getUiStyleInput () {
  var MAX = 60,
    MIN = 0,
    value = 30,
    key;
  console.log("\n\n" + new Array(20).join(" ") + "按X往前,Z往后, 按空格确定\n");
  while (true) {
    console.log(
      "\x1B[1A\x1B[K|" +
      new Array(value + 1).join("-") +
      "O" +
      new Array(MAX - value + 1).join("-") +
      "| " +
      value
    );
    key = readlineSync.keyIn("", { hideEchoBack: true, mask: "", limit: "zx " });
    if (key === "z") {
      if (value > MIN) {
        value--;
      }
    } else if (key === "x") {
      if (value < MAX) {
        value++;
      }
    } else {
      break;
    }
  }
  console.log("\nA value the user requested: " + value);
}
getUiStyleInput()
  • 效果图
    在这里插入图片描述
    在这里插入图片描述
使用inquirer包来实现
// npm install --save inquirer@^8.0.0
const inquirer = require("inquirer")
function getInquirerInput () {
  /**
   * type :
   *  input
   *  password (密码输入时是看不见的,输入完回车即可)
   *  editor 回车键之后会打开一个文本文档,在文本文档里面写内容,保持关闭之后这边就能拿到内容
   *  confirm 是/否 选择。得到bool类型的值
   *  list 无序列表 choices属性设置可选择列表,选中返回列表item
   *  rawlist 有序列表 choices属性设置可选择列表,选中返回列表item
   *  checkbox 多选  choices属性设置可选择列表,返回选择的item 用,分割 (按空格进行选择)
   */
  const questions = [
    {
      // 单选
      type: 'input',
      choices: ['www', 'bbb', 'nnn'],
      name: 'value',
      message: "select item?",
    },
  ];

  inquirer.prompt(questions).then(answers => {
    console.log(`you select is ${answers.value}`);
  });
}
getInquirerInput()
  • 这里就不一个个展示效果了,简单看两个效果
  • 列表选择效果
    在这里插入图片描述
    在这里插入图片描述
  • 获得输入
    在这里插入图片描述
    在这里插入图片描述
没了
  • 如果对你有帮助就点个赞吧!拜拜!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值