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

2024-06-26 09:47:30 浏览数 (2)

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

www.npmjs.com/package/inq…

1. 安装 Inquirer

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

代码语言:javascript复制
npm install inquirer

2. 使用 Inquirer

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

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

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

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

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

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

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

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

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

代码语言:javascript复制
	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 中的问题格式

代码语言:javascript复制
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 方法的回调函数中根据用户选择的运算类型进行计算,并打印计算结果。

0 人点赞