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
来收集用户的文本输入:
const inquirer = require('inquirer');
inquirer.prompt([
{
type: 'input',
name: 'username',
message: '请输入你的用户名:',
},
]).then(answers => {
console.log(`你输入的用户名是:${answers.username}`);
});
除了文本输入,inquirer
还提供了其他多种 prompt 类型,以满足不同的交互需求。
- 列表选择:让用户从一系列选项中选择一个。
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}`);
});
- 密码输入:用于收集敏感信息,如密码。
inquirer.prompt([
{
type: 'password',
name: 'password',
message: '请输入密码:',
mask: '*', // 输入时显示的掩码字符
},
]).then(answers => {
console.log(`你输入的密码是:${answers.password}`); // 注意:在实际应用中,不应该在控制台输出密码
});
- 确认:用于让用户确认某个操作。
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
方法的回调函数中根据用户选择的运算类型进行计算,并打印计算结果。