likes
comments
collection
share

inquirer 使用指南 - 比enquirer.js更活跃的Node.js 问答库

作者站长头像
站长
· 阅读数 69

如果你是一个 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:问题的类型,可以是 inputconfirmlistrawlistexpandcheckboxpasswordeditor
  • name:问题的名称,用于存储用户的回答。
  • message:问题的描述,用于显示给用户。
  • default:问题的默认值,可选。
  • choices:问题的选项,只有当 typelistrawlistexpandcheckbox 时才需要,可以是一个数组或一个函数。
  • validate:问题的验证函数,用于检查用户的回答是否合法,可选。
  • filter:问题的过滤函数,用于对用户的回答进行处理,可选。
  • transformer:问题的转换函数,用于对用户的回答进行格式化,可选。
  • when:问题的条件函数,用于判断是否显示该问题,可选。
  • pageSize:问题的分页大小,只有当 typelistrawlistexpand 时才有效,可选。

例如,我们可以定义以下问题数组:

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
评论
请登录