inquirer 一款命令行交互依赖
一、`inquirer` 简介
`inquirer` 是一个 Node.js 库,用于创建交互式命令行界面,允许你在命令行中向用户提出问题并接收用户的回答,从而实现更具交互性的命令行应用程序。
二、安装 `inquirer`
npm install inquirer
三、基本用法
1. 简单的提问和回答
向用户提出一个问题并接收用户的回答
// 引入 `inquirer` 库
const inquirer = require("inquirer");
inquirer
// 使用 `prompt` 方法提出一个问题列表
.prompt([
{
type: "input", // 问题类型为输入框
name: "username", // 存储用户回答的变量名
message: "What is your name?", // 向用户显示的问题
},
])
// 当用户回答问题后,使用 `then` 处理用户的回答,`answers` 是一个包含用户回答的对象,这里通过 `answers.username` 获取用户输入的名字。
.then((answers) => {
console.log(`Hello, ${answers.username}!`);
});
2. 多种问题类型
2.1 列表选择
inquirer
.prompt([
{
type: "list", // 问题类型为列表选择
name: "language",
message: "What is your favorite programming language?",
choices: ["JavaScript", "Python", "Java", "C++"], // 提供可供用户选择的选项列表
},
])
.then((answers) => {
console.log(`You chose ${answers.language}.`);
});
2.2 确认问题
inquirer
.prompt([
{
type: "confirm", // 问题类型为确认,用户可以回答 `y` 或 `n`
name: "continue",
message: "Do you want to continue?",
default: true, // 默认答案为 `true`
},
])
.then((answers) => {
if (answers.continue) {
console.log("Continuing...");
} else {
console.log("Stopping...");
}
});
2.3 密码输入
inquirer
.prompt([
{
type: "password", // 问题类型为密码输入,用户输入的内容将被隐藏
name: "password",
message: "Enter your password:",
},
])
.then((answers) => {
console.log(`Your password is ${answers.password}.`);
});
2.4 复选框
inquirer
.prompt([
{
type: "checkbox", // 问题类型为复选框,用户可以选择多个选项
name: "technologies",
message: "What technologies do you know?",
choices: ["Node.js", "React", "Vue", "Angular"],
},
])
.then((answers) => {
console.log(`You know: ${answers.technologies.join(", ")}.`);
});
四、高级用法
1. 验证用户输入
inquirer
.prompt([
{
type: "input",
name: "age",
message: "How old are you?",
// 添加验证函数,使用 `isNaN` 检查输入是否为数字,若不是则返回错误消息
validate: function (value) {
const valid = !isNaN(parseFloat(value));
return valid || "Please enter a number";
},
filter: Number, // 使用 `filter` 将输入转换为数字
},
])
.then((answers) => {
console.log(`You are ${answers.age} years old.`);
});
2. 动态问题
可以根据用户的回答动态生成问题
inquirer
.prompt([
{
type: "list",
name: "action",
message: "What do you want to do?",
choices: ["Create", "Update", "Delete"],
},
])
.then((answers) => {
if (answers.action === "Create") {
return inquirer.prompt([
{
type: "input",
name: "item",
message: "What do you want to create?",
},
]);
}
})
.then((answers) => {
if (answers) {
console.log(`You want to create ${answers.item}.`);
}
});