inquirer 使用指南 - 比enquirer.js更活跃的Node.js 问答库
如果你是一个 Node.js 开发者,你可能已经使用过 enquirer.js 这个库来创建交互式的命令行界面。enquirer.js 提供了一系列的问题类型,让你可以轻松地收集用户的输入,比如文本、选择、确认等。它也支持自定义问题类型和验证器,以及一些高级功能,比如多选、自动补全、分页等。
但是,你可能不知道的是,enquirer.js 已经有一段时间没有更新了,它的最新版本是 2.3.6,发布于 2020 年 8 月。而且,它的 issue 和 pull request 也没有得到及时的回复和处理。这可能会让一些开发者担心它的可靠性和稳定性,以及它是否能够适应 Node.js 的最新特性和变化。
如果你是其中之一,那么你可能会对 inquirer 这个库感兴趣。inquirer 是一个基于 enquirer.js 的 fork,它继承了 enquirer.js 的所有功能,并且在此基础上进行了一些改进和优化。inquirer 的最新版本是 8.2.0,发布于 2021 年 10 月。它也有一个活跃的社区,定期更新和修复 bug,并且欢迎贡献者的参与。
那么,inquirer 和 enquirer.js 有什么区别呢?下面我们来看一些主要的差异:
- inquirer 支持 Node.js 的最新版本,包括 ES6+ 的语法和特性。例如,你可以使用 async/await 来处理异步操作,而不需要使用回调函数或 promise。
- inquirer 支持 TypeScript,并且提供了完整的类型定义文件。这可以让你在使用 TypeScript 开发时享受到类型检查和智能提示的好处。
- inquirer 提供了更多的问题类型,比如 editor、checkbox-plus、expand、password、list、rawlist 等。这可以让你创建更丰富和灵活的交互界面。
- inquirer 支持更多的自定义选项,比如 prefix、suffix、default、filter、transformer、validate 等。这可以让你根据不同的场景调整问题的显示和行为。
- inquirer 支持更多的事件监听器,比如 error、keypress、line 等。这可以让你在用户输入时执行一些额外的逻辑或操作。
- inquirer 支持更多的主题和样式,比如 chalk-pipe、ansi-colors 等。这可以让你美化你的交互界面,并且提高用户体验。
总之,inquirer 是一个比 enquirer.js 目前更积极更新更活跃的 Node.js 问答库,它提供了更多的功能和选项,以及更好的兼容性和可扩展性。如果你想要创建一个优雅和强大的命令行界面,那么你应该考虑使用 inquirer 来替代 enquirer.js。
使用 inquirer
首先,你需要安装 inquirer。你可以使用 npm 或 yarn 来进行安装:
npm install inquirer
# or
yarn add inquirer
然后,你需要导入 inquirer 这个库,并且创建一个 prompt 对象:
const inquirer = require('inquirer');
const prompt = inquirer.createPromptModule();
接着,你需要定义一个问题数组,每个问题都是一个对象,包含以下属性:
type
:问题的类型,可以是input
、confirm
、list
、rawlist
、expand
、checkbox
、password
或editor
。name
:问题的名称,用于存储用户的回答。message
:问题的描述,用于显示给用户。default
:问题的默认值,可选。choices
:问题的选项,只有当type
是list
、rawlist
、expand
或checkbox
时才需要,可以是一个数组或一个函数。validate
:问题的验证函数,用于检查用户的回答是否合法,可选。filter
:问题的过滤函数,用于对用户的回答进行处理,可选。transformer
:问题的转换函数,用于对用户的回答进行格式化,可选。when
:问题的条件函数,用于判断是否显示该问题,可选。pageSize
:问题的分页大小,只有当type
是list
、rawlist
或expand
时才有效,可选。
例如,我们可以定义以下问题数组:
const questions = [{
type: 'input',
name: 'name',
message: 'What is your name?',
default: 'Anonymous'
},
{
type: 'confirm',
name: 'confirm',
message: 'Do you like inquirer?',
default: true
},
{
type: 'list',
name: 'language',
message: 'What is your favorite programming language?',
choices: ['JavaScript', 'Python', 'Java', 'C#', 'C++'],
default: 'JavaScript'
},
{
type: 'checkbox',
name: 'skills',
message: 'What skills do you have?',
choices: [
{ name: 'HTML', checked: true },
{ name: 'CSS', checked: true },
{ name: 'JavaScript', checked: true },
{ name: 'Node.js' },
{ name: 'React' },
{ name: 'Vue' }
]
},
{
type: 'password',
name: 'password',
message: 'Enter a password',
mask: '*'
}
];
最后,你需要调用 prompt 函数,并传入问题数组,然后使用 then 方法或 async/await 来获取用户的回答:
// 使用 then 方法
prompt(questions).then(answers => {
console.log(answers);
});
// 使用 async/await
(async () => {
const answers = await prompt(questions);
console.log(answers);
})();
这样就完成了一个简单的交互式命令行程序。你可以运行这个程序,并根据提示输入或选择你的答案。inquirer 还提供了很多其他的功能和选项,你可以查看官方文档来了解更多。
inquirer 是一个非常强大和灵活的库,可以帮助你创建各种交互式命令行程序。它可以让你的程序更加友好和有趣。如果你还没有尝试过 inquirer ,那么不妨试一试吧!
转载自:https://juejin.cn/post/7221376169370615869