npm 包 cli-questions 使用教程

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

npm 包是 Node.js 生态系统中非常重要的模块,cli-questions 便是其中之一。cli-questions 封装了控制台交互式问题的功能,这对于 Node.js 命令行工具来说非常有用。

本文将介绍 cli-questions 的使用方法,并提供示例代码。我们将详细地介绍该库的核心特点和使用技巧,以帮助您更轻松地使用这个库来构建强大的命令行程序。

安装

使用 npm 安装 cli-questions,命令如下:

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

基础用法

cli-questions 提供了一个 Question 类来表示问题,通过构造函数传入问题的参数,可以配置该问题的各种属性(例如问题文本、问题类型、问题答案、检验规则等)。在提问前,必须将该问题添加到问题数组中。

下面我们来看一个最简单的示例:

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

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

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

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

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

-------

在这个示例中,我们创建了一个 input 类型的问题,用于询问用户的名字。在添加这个问题后,我们通过 prompt() 函数启动这个问题,等待用户的回答。用户输入完成后,我们通过 ${result[name.symbol]} 取出该问题的答案,输出用户的名字。

需要注意的是,prompt() 函数返回一个 Promise,所以我们需要使用 await 关键字来等待用户的回答。

示例代码

接下来我们将通过示例代码来详细介绍 cli-questions 的使用,包括问题的类型、答案的检验、多个问题的组合、问题的提示等等。

基础问题类型

input 类型

input 类型的问题用于询问用户输入任意字符串。示例代码如下:

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

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

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

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

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

-------

在这个示例中,我们使用了 input 类型的问题,用于询问用户的名字。在 Question 的构造函数中,我们通过 text 属性来设置问题的文本。

number 类型

number 类型的问题用于询问用户输入数字。示例代码如下:

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

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

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

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

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

-------

在这个示例中,我们使用了 number 类型的问题,用于询问用户的年龄。需要注意的是,这个问题要求用户输入数字类型的数据,如果用户输入的是字符串类型,那么将会抛出错误。

confirm 类型

confirm 类型的问题用于询问用户“是”或“否”的确认问题。示例代码如下:

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

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

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

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

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

-------

在这个示例中,我们使用了 confirm 类型的问题,用于询问用户是否已婚。在 Question 的构造函数中,我们使用了 type 属性来设置问题的类型为 confirm

list 类型

list 类型的问题用于提供多个选项供用户选择。示例代码如下:

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

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

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

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

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

-------

在这个示例中,我们使用了 list 类型的问题,用于提供多种颜色给用户选择。在 Question 的构造函数中,我们使用了 choices 属性来设置问题的可选项。如果用户选择了其中的某个选项,那么 result 中该问题的答案将会是选中的选项。

password 类型

password 类型的问题用于询问用户要输入的密码。示例代码如下:

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

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

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

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

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

-------

在这个示例中,我们使用了 password 类型的问题,用于询问用户输入密码。在 Question 的构造函数中,我们使用了 type 属性来设置问题的类型为 password,同时使用 validate 属性来验证用户输入的密码,要求用户输入的密码长度至少为 6 个字符。

答案的检验

在前面的示例中,我们已经提到了 validate 属性了。validate 属性是一个回调函数,用于验证用户输入的答案是否符合要求。如果答案无效,那么返回一个错误信息;如果答案有效,那么返回 true

下面,我们举个例子。在这个例子中,我们要求用户输入一个字符串,要求字符串长度要大于等于 6 个字符。如果用户的输入字符串长度小于 6,那么会提示错误信息,要求用户重新输入。

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

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

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

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

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

-------

需要注意的是,如果用户输入的答案无效,那么 cli-questions 不会返回任何值,而是会提示用户重新输入。如果用户连续三次输入无效的答案,那么程序将会退出(或抛出异常)。

多个问题的组合

在实际的应用中,我们可能需要问多个问题来获取多个答案。在 cli-questions 中,我们可以使用 addQuestions() 方法来添加多个问题。cli-questions 会按照添加问题的顺序依次显示问题。

下面,我们举个例子,让用户依次输入姓名、年龄和性别。

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

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

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

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

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

-------

在这个示例中,我们依次添加了三个问题,然后使用 prompt() 方法来一次性获取用户的所有答案。需要注意的是,cli-questions 会按照问题的添加顺序逐个显示问题,并且不会跳过任何一个问题。

按钮

有时候,我们需要在问题中添加按钮,以供用户点击。在 cli-questions 中,我们可以使用 buttons 属性来添加按钮。

下面,我们举个例子,让用户通过按钮来选择操作。

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

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

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

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

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

-------

在这个示例中,我们创建了一个 button 类型的问题,用于让用户选择操作。在 Question 的构造函数中,我们使用了 buttons 属性来设置问题的按钮,包括按钮的 id 和文本。可以通过 result[op.symbol] 获取用户选择的按钮。需要注意的是,在显示按钮时,cli-questions 将不支持鼠标交互,用户只能使用键盘来选择按钮。如果你需要支持鼠标交互,可以考虑使用其它库,比如 Inquirer。

高级用法

在 cli-questions 中,还有一些高级用法,当你遇到一些更为复杂的需求时,可以进行使用。

自定义问题类型

cli-questions 的每个问题都对应了一个问题类型。对于每个问题类型,cli-questions 内部都有一个对应的实现。但是,如果你对于某个问题类型的实现不满意,你也可以自定义一个问题类型。你可以继承 BaseQuestion 类,并重写其中的一些方法(如 ask()validate() 等),从而实现自己的问题类型。

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

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

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

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

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

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

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

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

-------

在这个例子中,我们通过继承 BaseQuestion 类,创建了一个名为 MyQuestion 的问题类型。在 MyQuestion 中,我们重写了 ask()validate() 方法,实现了自己的问题类型。需要注意的是,在 MyQuestion 的构造函数中,我们设置了自己的问题类型为 my

自定义样式

在 cli-questions 中,我们可以通过 setTheme() 方法来设置用户界面的样式。cli-questions 提供了一些默认样式供使用,你也可以自己定义样式。

下面,我们使用 setTheme() 方法来设置问题的相关样式。

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

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

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

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

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

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

-------

在这个示例中,我们设置了问题文本的颜色为 magenta,答案文本的颜色为 yellow

总结

在本文中,我们介绍了 npm 包 cli-questions 的使用方法。通过本文的介绍,我们了解了如何:

  • 安装 cli-questions
  • 使用 Question 类定义问题
  • 使用 addQuestions()prompt() 方法管理和启动问题
  • 定义多种问题类型
  • 自定义问题类型和样式
  • ...

cli-questions 可以帮助我们方便地创建命令行程序。它提供了非常灵活的接口和丰富的功能,能满足各种不同的用途。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60055c0d81e8991b448d9aea


猜你喜欢

  • npm 包 evenflow 使用教程

    在前端开发中,有很多需要依赖外部库的情况,npm(Node Package Manager)是一个非常流行的包管理工具,可以用来安装、更新和分享 JavaScript 包。

    2 年前
  • npm 包 @sandfox/uglifyjs-webpack-plugin 使用教程

    在现代的前端开发过程中,使用 webpack 进行打包和压缩是必备技能。而 @sandfox/uglifyjs-webpack-plugin 是一个非常实用的 npm 包,它可以将你的 JavaScr...

    2 年前
  • npm 包 next-fetch 使用教程

    简介 next-fetch 是一款基于 fetch API 的 npm 包,主要用于前端开发中进行网络请求。它可以帮助开发者更加便捷地发起请求和处理请求的响应。 安装和引入 要使用 next-fetc...

    2 年前
  • npm 包 dxf-to-svg 使用教程

    什么是 dxf-to-svg? dxf-to-svg 是一个用于将 DXF 文件转换成 SVG 文件的 npm 包。DXF 是 AutoCAD 设计软件的文件格式,而 SVG 是可缩放矢量图形(Sca...

    2 年前
  • npm 包 simple-angular-table 使用教程

    简介 simple-angular-table 是一个基于 Angular 框架的简易表格组件,可快速构建数据表格。 安装 在项目中通过 npm 安装 simple-angular-table: --...

    2 年前
  • npm 包 all-line-points 使用教程

    简介 all-line-points 是一个基于 JavaScript 的 npm 包,可以方便地计算两个点之间的所有连线点。该包适用于前端开发领域。 安装 可以通过 npm 安装 all-line-...

    2 年前
  • npm 包 github-lang-getter 使用教程

    在开发过程中,我们常常需要获取某些开源项目的语言类型,比如 JavaScript、C++、Java 等等。为了不重复造轮子,有一款 npm 包叫做 github-lang-getter,可以帮助我们快...

    2 年前
  • npm 包 vue_axios_drag_upload 使用教程

    随着前端技术的快速发展,越来越多的前端工具和框架出现在我们的视野中。其中,Vue.js 和 Axios 是目前最受欢迎的前端框架,它们可以帮助我们快速搭建高效的前端应用程序。

    2 年前
  • npm 包 gulp-simpletask 使用教程

    简介 在前端的开发中,我们经常需要通过 Gulp 来进行自动化构建和任务执行。然而,Gulp 的使用往往需要大量的代码编写和配置,对于一些简单的任务,这会显得冗长和繁琐。

    2 年前
  • npm 包 @lvo/http 使用教程

    在前端开发中,我们常常需要发送 HTTP 请求并处理相应的数据。npm 包 @lvo/http 就是一个非常实用的工具,它可以帮助我们方便地发送 HTTP 请求并处理响应。

    2 年前
  • npm 包 aria-bootstrap-sass 使用教程

    介绍 aria-bootstrap-sass 是一个基于 Sass 的 UI 库,它提供了一组现代化的 Sass 变量、CSS 类和 Mixin,可用于快速构建响应式和可访问的网站和应用程序。

    2 年前
  • npm 包 xinq 使用教程

    前言 在现代 Web 前端项目中,使用各种 npm 包可以极大地提高开发效率和代码质量。xinq 是一个优秀的自然语言处理工具,可以用于中文语言的分词、识别实体、关键词提取等任务。

    2 年前
  • npm 包 ng2-dnd-kokatsuna 使用教程

    在前端开发中,拖拽是一个很常见也很实用的功能。而 ng2-dnd-kokatsuna 是一个帮助我们实现拖拽的 npm 包,它适用于 Angular 2+ 版本。 本文将为大家介绍 ng2-dnd-k...

    2 年前
  • npm包perf-hoc的使用教程

    简介 在前端开发中,性能一直是一个重要的关注点。性能优化的方法有很多种,其中一个常见的方法就是通过高阶组件来优化React应用的渲染性能,减少不必要的渲染次数,提升应用的性能。

    2 年前
  • npm 包 css-selector-inspector 使用教程

    在前端开发中,经常需要使用 CSS 选择器来定位页面上的元素。但是在复杂的页面中,选择器的编写可能会变得困难。这时候,一个好用的选择器工具就显得尤为重要,而 npm 包 css-selector-in...

    2 年前
  • npm 包 loopback-max-result-mixin 使用教程

    loopback-max-result-mixin 是一个用于 LoopBack 应用的 npm 包,它提供了一个 mixin,允许你设置 API 返回的每个列表的最大结果数。

    2 年前
  • npm 包 node-unnks 使用教程

    在前端开发中,我们经常需要使用各种 npm 包来完成我们的工作。其中,node-unnks 是一种非常实用的 npm 包,它可以帮助我们快速地进行命名空间的管理。在本文中,我们将介绍该 npm 包的使...

    2 年前
  • npm 包 unnks 使用教程

    简介 unnks 是一款前端工具库,提供了一系列实用的函数和工具,支持在 Node.js 和浏览器环境中使用。它的特点是轻量、易用、灵活。本教程将介绍 unnks 的安装和使用方法,包括常用函数的使用...

    2 年前
  • npm 包 cds-utils 使用教程

    简介 CDs(Component Driven System)是一个基于组件模型的Web前端开发框架。npm 包 cds-utils 是 CDs 的辅助工具,提供了一些便捷的工具函数,可以大大提高开发...

    2 年前
  • npm 包 atscntrb-hx-weboxy 使用教程

    在前端开发过程中,经常需要使用一些工具或库来简化开发流程。npm 是一个非常流行的 JavaScript 包管理工具,它可以帮助我们快速安装和使用各种开发工具和库。

    2 年前

相关推荐

    暂无文章