简介
inquiry
是一个 Node.js 中常用的包,可以轻松地创建交互式界面,用于用户输入和对话框式 UI。它可以通过 shell 终端、命令行、网页表单等方式调用。在前端开发中,它经常被用于库/插件的 CLI(命令行接口)的构建,以及自动生成 README、package.json 等文件的时候。
使用 inquiry
能够有很多好处:
- 可以轻松地创建交互式界面,与用户直接交互。
- 可以收集用户输入的数据,用于进一步处理。
- 可以减少从各种渠道获取数据的时间和努力。
- 可以减少出现错误的机会,由于用户受到指导并且必须回答所有问题。
在本篇文章中,我们将总结和介绍一些常见的用法,以及如何在自己的项目中使用它,以及示范代码。
安装
在开始之前,你需要先安装 inquiry
包。你可以在项目根目录运行以下命令:
npm install inquery
常见的用法
快速入门
下面是一个使用 inquiry
的基本教程,我们将向用户询问他们的名字,年龄和职业,并在最后使用这些信息创建一个小卡片。
-- -------------------- ---- ------- ----- ------- - ------------------ ---------------- - ----- -------- ----- ------- -------- ----- -- ---- ------- -- - ----- --------- ----- ------ -------- ----- -- ---- ------ -- - ----- ------- ----- ------ -------- ----- -- ---- ------------- -------- ------------ --------- --------- ---------- --------- - ----------------- -- - ----------------- -- ---- ------- ------------------------------------------------- ------------------ ------------------ ----------------- ----------------- ------------------------ ----------------- ---
在以上代码中,inquery
提供了一个 prompt()
函数,用于询问问题并收集数据。这个函数接收一个数组,包含了要求答案的问题的列表。对于我们上面的例子,我们有三个问题:
- 第一个问题是类型为
input
的问题,请求输入名字。我们提供了一个message
的字符串提示。 - 第二个问题是类型为
number
的问题,请求输入年龄。 - 第三个问题是类型为
list
的问题,提供了一个选择菜单,可供选择职业。
一旦用户回答了所有的问题,这些答案将被收集在 answers
对象中,我们可以在 Promise 的 resolve 方法中使用它们。
校验输入
对于一些必填的问题,你可能希望用户不能留空。为了达到这个目的,我们可以在 prompt()
函数中添加一个 validate
属性,用于返回一个错误消息或者是一个 Boolean(如果没有错误的话)。
-- -------------------- ---- ------- ----- ------- - ------------------ ---------------- - ----- -------- ----- ------- -------- ----- -- ---- ------- --------- --------------- - -- -------------------- -- -- - ------ ----- -- ----------- - ------ ----- - -- - ----- --------- ----- ------ -------- ----- -- ---- ------ --------- --------------- - -- -------------- - ------ ---- ---- -- - --------- - ------ ----- - -- - ----- ------- ----- ------ -------- ----- -- ---- ------------- -------- ------------ --------- --------- ---------- --------- - ----------------- -- - ----------------- -- ---- ------- ------------------------------------------------- ------------------ ------------------ ----------------- ----------------- ------------------------ ----------------- ---
在以上代码中,我们向用户询问名字和年龄,并添加了一些校验代码。validate
属性是当用户提交表单的时候调用的,它接收用户的输入值,如果输入值不合法,则返回一个错误消息,否则返回 true
。
分步骤询问
在某些情况下,我们可能希望在不同的阶段向用户询问不同的问题,并根据之前的答案作出反应。为了达到这个目的,我们可以使用 prompts
属性,作为 prompt()
的替代方法,来构建一个分步骤的列表:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ------- - - - ----- -------- ----- ------- -------- ----- -- ---- ------- -- - ----- --------- ----- ------ -------- ----- -- ---- ------ -------- --- --------- --------------- - -- -------------- - ------ ---- ---- -- - --------- - ------ ----- - -- - ----- ------- ----- ------ -------- ----- -- ---- ------------- -------- ------------ --------- --------- ---------- --------- -- - ----- ---------- ----- -------- -------- ---- --- -------- -------- ---- -- - ----- -------- ----- --------- -------- -------- ------ ----- ----------------- - ------ --------------- - - -- ------------------------------- -------------------------- - -- ------------ --- ----------- - -------------- ----- -------- ----- ----------- -------- ----- ----------- -------- -- --- ---------- ---- --- - ------ ------------------------ ----------------- -- - ----------------- -- ---- ------- ------------------------------------------------- ------------------ ------------------ ----------------- ----------------- ------------------------ ----------------- -- ------------ --- ----------- - ---------------------- ---------------------- - ------------------- ------------------- -- ---------------- - -------------------- -------------------- - ---
在以上代码中,我们创建了一个 prompts
数组,包含了所有的问题,同时我们使用了 slice()
方法来选择只询问第 1 至第 3 个问题。我们将这些问题传递给 prompt()
函数,以建立一个交互式的命令行。
在用户完成了第 3 个问题后,我们使用 then()
方法来添加一个额外的问题,这个问题仅在选择了“工程师”这个职业时才会被询问,并在答案列表中添加一个 language
属性。最后,我们将 prompts
传递给 prompt()
函数,以询问剩下的所有问题,最终返回一个 Promise,其中包含了所有的用户答案。
从文件读取询问
如果问题太多,可能会很难维护一个巨大的数组 prompts
。这时,我们可以将问题存储在一个单独的文件中,使用 require
语句来加载这个文件。
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ------- - ------------------------- -------------------------------------- -- - ----------------- -- ---- ------- ------------------------------------------------- ------------------ ------------------ ----------------- ----------------- ------------------------ ----------------- -- ------------ --- ----------- - ---------------------- ---------------------- - ------------------- ------------------- -- ---------------- - -------------------- -------------------- - ---
在以上代码中,我们将所有的问题存储在一个名为 prompts.json
的文件中,使用 require
语句将其加载并传递给 prompt()
函数。
其他常用的问题类型
inquery
包中支持的问题类型有多种,包括但不限于以下几种:
- confirm:使用 Yes/No 回答进行确认。
- list:提供选项列表供用户选择。
- rawlist:类似于 list,但不带有数字、选择、等等。
- expand:更高阶的 list,用户可以通过选择向下展开图表。
- checkbox:允许用户选择多个选项。
- password:隐藏密码输入,显示为星号(*)。
你可以在使用 prompt()
方法时指定这些类型。
总结
inquiry
可以帮助我们快速、轻松地创建交互式的用户界面,收集用户输入数据,对答案进行验证。通过上面介绍的常用用法,我们可以灵活地运用这个包,将其应用于我们的项目中。希望这篇文章能够为你提供一些有用的信息和实践指南。如果你想要了解更多关于 inquery
的包,你可以阅读官方文档。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f7b238a385564ab69f9