npm 包 inquery 使用教程

阅读时长 10 分钟读完

简介

inquiry 是一个 Node.js 中常用的包,可以轻松地创建交互式界面,用于用户输入和对话框式 UI。它可以通过 shell 终端、命令行、网页表单等方式调用。在前端开发中,它经常被用于库/插件的 CLI(命令行接口)的构建,以及自动生成 README、package.json 等文件的时候。

使用 inquiry 能够有很多好处:

  • 可以轻松地创建交互式界面,与用户直接交互。
  • 可以收集用户输入的数据,用于进一步处理。
  • 可以减少从各种渠道获取数据的时间和努力。
  • 可以减少出现错误的机会,由于用户受到指导并且必须回答所有问题。

在本篇文章中,我们将总结和介绍一些常见的用法,以及如何在自己的项目中使用它,以及示范代码。

安装

在开始之前,你需要先安装 inquiry 包。你可以在项目根目录运行以下命令:

常见的用法

快速入门

下面是一个使用 inquiry 的基本教程,我们将向用户询问他们的名字,年龄和职业,并在最后使用这些信息创建一个小卡片。

-- -------------------- ---- -------
----- ------- - ------------------

----------------
    -
        ----- --------
        ----- -------
        -------- ----- -- ---- -------
    --
    -
        ----- ---------
        ----- ------
        -------- ----- -- ---- ------
    --
    -
        ----- -------
        ----- ------
        -------- ----- -- ---- -------------
        -------- ------------ --------- --------- ---------- ---------
    -
----------------- -- -
    ----------------- -- ---- -------
    -------------------------------------------------
    ------------------ ------------------
    ----------------- -----------------
    ------------------------ -----------------
---

在以上代码中,inquery 提供了一个 prompt() 函数,用于询问问题并收集数据。这个函数接收一个数组,包含了要求答案的问题的列表。对于我们上面的例子,我们有三个问题:

  1. 第一个问题是类型为 input 的问题,请求输入名字。我们提供了一个 message 的字符串提示。
  2. 第二个问题是类型为 number 的问题,请求输入年龄。
  3. 第三个问题是类型为 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

纠错
反馈