inquirer.js 构建交互式命令行工具,全网详细 inquirer.js中文教程

Inquirer 是一个流行的 Node.js 库,用于构建交互式命令行界面。它提供了一个简单而强大的 API,使得创建用户友好的交互变得容易。可以看作是一款强大的命令行交互式问答库

www.npmjs.com/package/inq...

1. 安装 Inquirer

首先,你需要在你的项目中安装 Inquirer。你可以通过 npm 来完成这个操作:

js 复制代码
npm install inquirer

2. 使用 Inquirer

安装完成后,你就可以在你的项目中引用并使用 Inquirer 了。下面是一个基本的使用例子:

js 复制代码
const inquirer = require('inquirer');

inquirer
  .prompt([
    /* Pass your questions in here */
  ])
  .then((answers) => {
    // Use user feedback for... whatever!!
  });

inquirer 提供了一系列的 prompt 类型,包括文本输入、列表选择、密码输入等。下面是一个简单的示例,展示了如何使用 inquirer 来收集用户的文本输入:

js 复制代码
	const inquirer = require('inquirer');  
	inquirer.prompt([  
	    {  
	        type: 'input',  
	        name: 'username',  
	        message: '请输入你的用户名:',  
	    },  
	]).then(answers => {  
	    console.log(`你输入的用户名是:${answers.username}`);  
	});

除了文本输入,inquirer 还提供了其他多种 prompt 类型,以满足不同的交互需求。

  1. 列表选择:让用户从一系列选项中选择一个。
js 复制代码
	const choices = [  
	    { name: '选项A', value: 'a' },  
	    { name: '选项B', value: 'b' },  
	    { name: '选项C', value: 'c' },  
	];  
	inquirer.prompt([  
	    {  
	        type: 'list',  
	        name: 'choice',  
	        message: '请选择一个选项:',  
	        choices: choices,  
	    },  
	]).then(answers => {  
	    console.log(`你选择的选项是:${answers.choice}`);  
	});
  1. 密码输入:用于收集敏感信息,如密码。
js 复制代码
	inquirer.prompt([  
	    {  
	        type: 'password',  
	        name: 'password',  
	        message: '请输入密码:',  
	        mask: '*', // 输入时显示的掩码字符  
	    },  
	]).then(answers => {  
	    console.log(`你输入的密码是:${answers.password}`); // 注意:在实际应用中,不应该在控制台输出密码  
	});
  1. 确认:用于让用户确认某个操作。
js 复制代码
	inquirer.prompt([  
	    {  
	        type: 'confirm',  
	        name: 'confirmAction',  
	        message: '你确定要执行这个操作吗?',  
	    },  
	]).then(answers => {  
	    if (answers.confirmAction) {  
	        console.log('用户确认执行操作');  
	    } else {  
	        console.log('用户取消执行操作');  
	    }  
	});

inquirer 还提供了许多高级功能,如嵌套 prompt、动态生成 prompt 等。这些功能可以让你创建出更加复杂和灵活的命令行交互。

例如,你可以根据用户的上一个选择来动态生成下一个 prompt 的选项:

js 复制代码
	inquirer.prompt([  
	    {  
	        type: 'list',  
	        name: 'category',  
	        message: '请选择一个分类:',  
	        choices: ['水果', '蔬菜'],  
	    },  
	    {  
	        type: 'list',  
	        name: 'item',  
	        when: answers => answers.category === '水果', // 当 category 为 "水果" 时才显示这个 prompt  
	        message: '请选择一个水果:',  
	        choices: ['苹果', '香蕉', '橙子'],  
	    },  

	]).then(answers => {  
	    console.log(`你选择的分类是:${answers.category}`);  
	    if (answers.item) {  
	        console.log(`你选择的水果是:${answers.item}`);  
	    }  
	});

在这个示例中,我们使用了 when 属性来指定一个条件函数。只有当这个函数返回 true 时,对应的 prompt 才会被显示。这样,我们就可以根据用户的上一个选择来动态地生成下一个 prompt 的选项。

3,inquirer 中的问题格式

js 复制代码
const inquirer = require('inquirer');

inquirer
  .prompt([
    {
      // 问题类型,可以是
      // input, number, password, list, confirm, rawlist, expand, checkbox, editor
      type: 'input',

      // 问题的名称,用于在答案对象中引用该问题的答案
      name: 'username',

      // 问题的提示信息
      message: '请输入用户名:',

      // (可选)问题的默认答案
      default: 'guest',

      // (可选,仅适用于 list, rawlist, expand, checkbox 类型)问题的可选答案
      choices: [],

      // (可选)验证用户答案的函数,接收答案作为参数,返回布尔值或字符串
      validate: function (value) {
        // 如果返回 true,则表示答案有效
        // 如果返回字符串,则表示答案无效,并显示字符串作为错误信息
      },

      // (可选)处理用户答案的函数,接收答案作为参数,返回处理后的答案
      filter: function (value) {
        // 返回处理后的答案
      },

      // (可选)根据前面的答案决定是否提问当前问题的函数,接收前面的答案对象作为参数,返回布尔值
      when: function (answers) {
        // 如果返回 true,则提问当前问题
        // 如果返回 false,则跳过当前问题
      }

     //(可选)转换答案显示的函数,接收答案和答案对象作为参数,返回转换后的答案
      transformer: function (value, answers) {
        // 返回转换后的答案,例如:return value.toUpperCase();
      },

      // (可选,仅适用于 list, rawlist, expand, checkbox 类型)指定每页显示的选项数量
      pageSize: 10,

      // (可选)为问题的提示信息添加前缀
      prefix: '[?]',

      // (可选)为问题的提示信息添加后缀
      suffix: ':'

    }
  ])
  .then((answers) => {
    // 使用用户答案进行操作
  });

4,inquirer.js 中的9种问题类型

下面我们将详细介绍 Inquirer 的这9种问题类型以及它们的用法:

1. input

input 类型用于提供一行文本输入。用户可以输入任意文本作为答案。

示例:

javascript 复制代码
{
  type: 'input',
  name: 'name',
  message: '请输入你的名字:'
}

2. number

number 类型用于提供一行数字输入。用户可以输入一个数字作为答案。

示例:

javascript 复制代码
{
  type: 'number',
  name: 'age',
  message: '请输入你的年龄:'
}

3. password

password 类型用于提供一行密码输入。用户输入的内容将会被隐藏,以保护隐私。

示例:

javascript 复制代码
{
  type: 'password',
  name: 'password',
  message: '请输入你的密码:'
}

4. list

list 类型用于提供一个列表选择。用户可以从列表中选择一个选项作为答案。需要设置 choices 属性来提供可选答案。

示例:

javascript 复制代码
{
  type: 'list',
  name: 'color',
  message: '请选择你喜欢的颜色:',
  choices: ['红色', '绿色', '蓝色']
}

5. confirm

confirm 类型用于提供一个确认选择。用户可以选择 "yes" 或 "no" 作为答案。

示例:

javascript 复制代码
{
  type: 'confirm',
  name: 'continue',
  message: '是否继续?',
  default: true
}

6. rawlist

rawlist 类型用于提供一个原始列表选择。与 list 类型相似,但用户需要输入列表中选项对应的数字来选择答案。需要设置 choices 属性来提供可选答案。

示例:

javascript 复制代码
{
  type: 'rawlist',
  name: 'color',
  message: '请选择你喜欢的颜色:',
  choices: ['红色', '绿色', '蓝色']
}

7. expand

expand 类型用于提供一个扩展列表选择。用户可以输入选项对应的键来选择答案。需要设置 choices 属性来提供可选答案,并为每个选项设置 key 属性。

示例:

javascript 复制代码
{
  type: 'expand',
  name: 'color',
  message: '请选择你喜欢的颜色:',
  choices: [
    { key: 'r', name: '红色' },
    { key: 'g', name: '绿色' },
    { key: 'b', name: '蓝色' }
  ]
}

8. checkbox

checkbox 类型用于提供一个复选框选择。用户可以选择多个选项作为答案。需要设置 choices 属性来提供可选答案。

示例:

javascript 复制代码
{
  type: 'checkbox',
  name: 'languages',
  message: '请选择你掌握的编程语言:',
  choices: ['JavaScript', 'Python', 'Java', 'C++']
}

9. editor

editor 类型用于提供一个编辑器选择。用户可以在系统默认编辑器中输入或编辑文本作为答案。

示例:

javascript 复制代码
{
  type: 'editor',
  name: 'bio',
  message: '请简要介绍一下你自己:'
}

5,inquirer.js 输入后怎么处理

在 Inquirer 中,处理用户输入的主要方式是通过 then 方法的回调函数来获取用户的答案,然后根据答案进行相应的处理。答案是一个对象,其中的键是问题的 name,值是用户的答案。

例如:

javascript 复制代码
const inquirer = require('inquirer');

inquirer
  .prompt([
    {
      type: 'input',
      name: 'name',
      message: 'What\'s your name?'
    },
    {
      type: 'confirm',
      name: 'continue',
      message: 'Do you want to continue?',
      default: true
    }
  ])
  .then((answers) => {
    console.log(`Hello, ${answers.name}!`);
    if (answers.continue) {
      console.log('Let\'s continue!');
    } else {
      console.log('Goodbye!');
    }
  });

在这个例子中,我们首先通过 prompt 方法提出两个问题,然后在 then 方法的回调函数中获取用户的答案并进行处理。如果用户选择继续,我们打印 "Let's continue!",否则打印 "Goodbye!"。

此外,Inquirer 还提供了一些高级的用法来处理用户的答案,比如:

  • 使用 validate 属性来验证用户的答案。这是一个函数,接收用户的答案作为参数,并返回一个布尔值或字符串。如果返回 true,则表示答案有效;如果返回字符串,表示答案无效,并显示返回的字符串作为错误信息。

  • 使用 filter 属性来处理用户的答案。这是一个函数,接收用户的答案作为参数,并返回处理后的答案。

  • 使用 transformer 属性来转换答案的显示。这是一个函数,接收答案和答案对象作为参数,并返回转换后的答案。

通过这些方法,你可以对用户的答案进行详细的处理和控制。

6,实战:使用 Inquirer.js 实现一个简单的命令行计算器功能

下面我们将使用 Inquirer.js 实现一个简单的命令行计算器功能。用户可以选择要执行的运算类型(加、减、乘、除)以及输入两个数字,程序将返回计算结果。

javascript 复制代码
const inquirer = require('inquirer');

inquirer
  .prompt([
    {
      type: 'list',
      name: 'operation',
      message: '请选择要执行的运算类型:',
      choices: ['加法', '减法', '乘法', '除法']
    },
    {
      type: 'number',
      name: 'num1',
      message: '请输入第一个数字:'
    },
    {
      type: 'number',
      name: 'num2',
      message: '请输入第二个数字:'
    }
  ])
  .then((answers) => {
    let result;

    switch (answers.operation) {
      case '加法':
        result = answers.num1 + answers.num2;
        break;
      case '减法':
        result = answers.num1 - answers.num2;
        break;
      case '乘法':
        result = answers.num1 * answers.num2;
        break;
      case '除法':
        result = answers.num1 / answers.num2;
        break;
    }

    console.log(`运算结果为:${result}`);
  });

在这个例子中,我们首先使用 list 类型的问题让用户选择运算类型,然后使用 number 类型的问题让用户输入两个数字。接下来,我们在 then 方法的回调函数中根据用户选择的运算类型进行计算,并打印计算结果。

相关推荐
HUMHSX38 分钟前
Vue 项目启动全流程解析:从入口文件到全局指令注册与页面渲染
前端·javascript·vue.js
有颜有货1 小时前
PMC生产排产的4种算法,一次讲清
java·服务器·前端
小虎牙0071 小时前
Android kotlin图片库Coil源码详解
android·前端
随风一样自由1 小时前
【前端领域】前端开发核心应用场景与落地实践
前端·前端框架
an317421 小时前
弹窗数据流设计的两种高阶架构实践
前端·vue.js·架构
谢尔登2 小时前
【React】 状态管理方案
前端·react.js·前端框架
用户2136610035722 小时前
Vue商品详情与放大镜组件
前端·javascript
半个落月2 小时前
从Tapas小Demo理清localStorage、事件与this
前端·javascript
李明卫杭州2 小时前
Vue2 中 v-model 处理不同数据结构的技巧
前端·javascript·vue.js
李明卫杭州2 小时前
使用 computed 处理 v-model 复杂数据结构
前端·javascript·vue.js