npm 包 @hapi/bossy 使用教程

阅读时长 9 分钟读完

在前端开发中,经常需要通过命令行对项目进行操作,例如启动开发环境、打包生产代码等。而 @hapi/bossy 便是一个方便的 npm 包,能够帮助我们在命令行中解析参数和选项,快速创建命令行工具。

安装

我们可以使用 npm 安装 @hapi/bossy:

使用

@hapi/bossy 通过解析 CLI(Command Line Interface)的参数和选项,提供了一个方便的方法来创建命令行工具。在使用之前,我们需要先编写处理不同参数和选项的逻辑。

例如,假设我们要创建一个命令行工具,用于将输入的字符串反转并输出。我们可以通过 @hapi/bossy 来解析命令行输入的字符串,并获取字符串参数:

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

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

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

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

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

在上述代码中,我们首先定义了输入参数为一个字符串,指定了输入字符串的别名为 -i,默认值为空字符串,并且必须要在命令行中传入该参数(即 demand: true)。然后通过 Bossy.parse 方法解析命令行参数,并根据参数运行不同的逻辑。如果解析错误,打印出错误信息并退出进程。

指南

在使用 @hapi/bossy 时,以下是值得注意和遵循的一些指南。

定义命令行参数和选项

我们可以定义命令行参数和选项的类型、别名、默认值、是否必须等属性。这些属性可以帮助我们在解析命令行输入时提供某种程度的容错性和适应性。例如,在上述例子中,我们定义了 -i 参数别名,并将其定义为必要参数,以确保用户总是提供反转的字符串。

错误处理

当发生错误时,Bossy.parse 方法返回一个错误对象。在我们的代码中,我们需要进行错误处理,确保任何问题都能够得到有意义的处理或报告。通常的做法是根据错误类型作出相应的处理,例如:处理语法错误、处理意外选项或参数等等。

组织代码

如果我们的命令行工具的逻辑相对复杂,在一个文件中不同部分代码相互干扰的可能性就很大。因此,我们需要组织我们的代码,例如将处理逻辑拆分为单独的函数或类,或使用适当的设计模式。

异步处理

Bossy.parse 方法是同步的,但我们的处理逻辑可能需要异步执行,例如从远程 API 获取数据或执行数据库查询。因此,我们需要考虑如何与异步处理进行交互。通常的做法是返回 Promise,Promise 中包含我们的异步操作并将处理后的结果传递给主程序。

示例

以下是一个更复杂的示例,演示如何使用 @hapi/bossy 来实现复杂的命令行工具。这个工具获取 JSON 数据(可以从文件中加载,也可以通过 HTTP 获取)并对其中的数字字段进行统计。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在这个例子中,我们首先定义了几个函数,用于从文件或远程服务器中获取 JSON 数据,以及对其中的数字进行统计。然后,我们根据命令行参数创建了 definition 对象,定义了我们需要的命令行选项和参数类型。我们通过 Bossy.parse 方法解析命令行输入,并对其进行错误处理(如果有任何错误,则打印错误并退出)。根据获取到的选项和参数,我们从所提供的源中加载 JSON 数据,然后将其拆分为多个片段,并在每个处理片段上异步地执行 countNumbers 方法。最后,我们将结果组合起来,打印出总计数和总和。我们还在命令行输入中添加了 -h 或 --help 选项,以便轻松地查看帮助文档。

总结

@hapi/bossy 是一个强大的 npm 包,可以帮助我们在命令行工具中解析参数和选项,提供前端开发工具的灵活性和适应性。它提供了清晰的 API、简单的错误处理和易于组织的逻辑。借助该工具,我们可以更容易地创建符合我们的需求的命令行工具,并构建更高效、更流畅的前端开发流程。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/152545