介绍
Inquirer.js 是常用交互式命令行用户界面的集合。 这包括键入问题的答案或从列表中选择一个选项。
inquirer 包提供了几个默认提示并且是高度可配置的。 它也可以通过插件接口进行扩展。 它甚至支持 Promise 和 async/await 语法。
在本文中,您将安装和探索 Inquirer.js 的一些功能。
先决条件
如果您想继续阅读本文,您将需要:
- Node.js 的本地开发环境。 关注【X7X】如何安装Node.js并创建本地开发环境【X76X】。
本教程已使用 Node v15.14.0、npm v7.10.0 和 inquirer v8.0.0 进行了验证。
第 1 步 — 设置项目
首先,打开终端窗口并创建一个新的项目目录:
mkdir inquirer-example
然后,导航到此目录:
cd inquirer-example
要开始向您的 Node.js 脚本添加提示,您需要安装 inquirer 包:
npm install inquirer
此时,您已经准备好使用 Inquirer.js 的新项目。
第 2 步 — 创建提示
现在,在您的项目目录中创建一个新的 index.js 文件并使用代码编辑器打开它。
在您的脚本中,请确保需要 inquirer:
index.js
const inquirer = require('inquirer');
添加一个提示,询问用户他们最喜欢的爬行动物:
index.js
const inquirer = require('inquirer');
inquirer
.prompt([
{
name: 'faveReptile',
message: 'What is your favorite reptile?'
},
])
.then(answers => {
console.info('Answer:', answers.faveReptile);
});
重新访问您的终端窗口并运行脚本:
node index.js
您将看到一个提示:
Output? What is your favorite reptile?
提供答案将显示响应:
Output? What is your favorite reptile? Crocodiles Answer: Crocodiles
您可以提供一个 default 值,允许用户在不提交任何答案的情况下按下 ENTER:
index.js
const inquirer = require('inquirer');
inquirer
.prompt([
{
name: 'faveReptile',
message: 'What is your favorite reptile?',
default: 'Alligators'
},
])
.then(answers => {
console.info('Answer:', answers.faveReptile);
});
再次运行脚本,您将看到一个提示:
Output? What is your favorite reptile? (Alligators)
在没有答案的情况下按 ENTER 将提交默认答案:
Output? What is your favorite reptile? Alligators Answer: Alligators
现在,您可以创建提示并设置默认值。
第 3 步 - 创建多个提示
您可能已经注意到 .prompt() 方法接受一个数组或对象。 这是因为您可以将一系列提示问题串在一起,并且一旦解决了所有提示,所有答案都将按名称作为 answers 变量的一部分提供。
在您的代码编辑器中重新访问 index.js 并添加一个提示,询问用户他们最喜欢的颜色:
index.js
const inquirer = require('inquirer');
inquirer
.prompt([
{
name: 'faveReptile',
message: 'What is your favorite reptile?',
default: 'Alligators'
},
{
name: 'faveColor',
message: 'What is your favorite color?',
default: '#008f68'
},
])
.then(answers => {
console.info('Answers:', answers);
});
再次运行脚本,您将看到两个提示:
Output? What is your favorite reptile? Alligators
? What is your favorite color? #008f68
Answers: { faveReptile: 'Alligators', faveColor: '#008f68' }
现在,您可以创建多个提示。
第 4 步 — 使用列表、原始列表、可扩展列表、复选框、密码和编辑器
inquirer 不仅支持提示用户输入文本。 举例来说,以下类型将单独展示,但您可以通过将它们传递到同一个数组中来将它们链接在一起。
列表
list 类型允许您向用户提供一组固定的选项供您选择,而不是像 input 类型提供的自由格式输入:
列表.js
const inquirer = require('inquirer');
inquirer
.prompt([
{
type: 'list',
name: 'reptile',
message: 'Which is better?',
choices: ['alligator', 'crocodile'],
},
])
.then(answers => {
console.info('Answer:', answers.reptile);
});
重新访问您的终端窗口并运行脚本:
node list.js
您将看到 list 提示:
Output? Which is better? (Use arrow keys) ❯ alligator crocodile
用户可以通过 ARROW UP 和 ARROW DOWN 键来浏览选项列表。 j 和 k 键盘导航也可用。
原始清单
rawlist 类型类似于 list。 它显示一个选项列表并允许用户输入他们选择的索引(从 1 开始):
rawlist.js
const inquirer = require('inquirer');
inquirer
.prompt([
{
type: 'rawlist',
name: 'reptile',
message: 'Which is better?',
choices: ['alligator', 'crocodile'],
},
])
.then(answers => {
console.info('Answer:', answers.reptile);
});
重新访问您的终端窗口并运行脚本:
node list.js
您将看到 rawlist 提示:
Output? Which is better? 1) alligator 2) crocodile Answer:
提交无效值将导致 "Please enter a valid index" 错误。
可扩展列表
expand 类型让人想起一些命令行应用程序,这些应用程序为您提供了一个字符列表,这些字符映射到可以输入的功能。 expand 提示最初将向用户显示可用字符值的列表,并在按下键时为它们提供上下文:
扩展.js
const inquirer = require('inquirer');
inquirer
.prompt([
{
type: 'expand',
name: 'reptile',
message: 'Which is better?',
choices: [
{
key: 'a',
value: 'alligator',
},
{
key: 'c',
value: 'crocodile',
},
],
},
])
.then(answers => {
console.info('Answer:', answers.reptile);
});
重新访问您的终端窗口并运行脚本:
node expand.js
您将看到 expand 提示:
Output? Which is better? (acH)
默认情况下,包含 H 选项,它代表 "Help",输入 H 并点击 ENTER 将切换到选项列表,索引为然后可以输入它们的字符以进行选择。
Output? Which is better? (acH) a) alligator c) crocodile h) Help, list all options Answer:
提交无效值将导致 "Please enter a valid command" 错误。
复选框
checkbox 类型也类似于 list。 它允许您选择多个选项,而不是单个选择。
复选框.js
const inquirer = require('inquirer');
inquirer
.prompt([
{
type: 'checkbox',
name: 'reptiles',
message: 'Which reptiles do you love?',
choices: [
'Alligators', 'Snakes', 'Turtles', 'Lizards',
],
},
])
.then(answers => {
console.info('Answer:', answers.reptiles);
});
重新访问您的终端窗口并运行脚本:
node checkbox.js
您将看到 checkbox 提示:
Output? Which reptiles do you love? (Press <space> to select, <a> to toggle all, <i> to invert selection) ❯◯ Alligators ◯ Snakes ◯ Turtles ◯ Lizards
与其他 list 类型类似,您可以使用箭头键进行导航。 要进行选择,您可以点击 SPACE,也可以使用 a 选择全部或使用 i 反转您的选择。
OutputAnswer: [ 'Alligators', 'Snakes', 'Turtles', 'Lizards' ]
与其他提示类型不同,此提示类型的答案将返回一个数组而不是字符串。 即使用户选择不选择任何项目,它也将始终返回一个数组。
密码
password 类型将对用户隐藏输入。 这允许用户提供不应该看到的敏感信息:
const inquirer = require('inquirer');
inquirer
.prompt([
{
type: 'password',
name: 'secret',
message: 'Tell me a secret',
},
])
.then(answers => {
// Displaying the password for debug purposes only.
console.info('Answer:', answers.secret);
});
重新访问您的终端窗口并运行脚本:
node password.js
您将看到 password 提示:
Output? Tell me a secret [hidden]
输入对用户隐藏。
编辑
editor 类型允许用户使用他们的默认文本编辑器来输入更大的文本。
编辑器.js
const inquirer = require('inquirer');
inquirer
.prompt([
{
type: 'editor',
name: 'story',
message: 'Tell me a story, a really long one!',
},
])
.then(answers => {
console.info('Answer:', answers.story);
});
重新访问您的终端窗口并运行脚本:
node editor.js
您将看到 editor 提示:
Output? Tell me a story, a really long one! Press <enter> to launch your preferred editor.
inquirer 将尝试根据 $EDITOR 和 $VISUAL 环境变量的值在用户系统上打开文本编辑器。 如果两者都不存在,将使用 vim (Linux) 和 notepad.exe (Windows) 代替。
结论
在本文中,您安装并探索了 Inquirer.js 的一些功能。 此工具可用于从用户检索信息。
使用一些 插件 继续学习。 像 inquirer-autocomplete-prompt、inquirer-search-list 和 inquirer-table-prompt。