[NodeJS] 使用 Yargs 处理命令参数

最开始
最早
开始时
起初

希望能够创建一个像这样传递参数的NodeJS应用程序。

 node mynote add --title="title" --body="message body"

假设add是功能名称,–title是标题,–body是正文。
大家,在这种情况下你们会怎么做呢?
虽然可以编写冗长的处理方式,但相当麻烦是吧。
而且,如果还想增加另一个功能称为list的话…
基于这样的想法,我要介绍一下简单参数解析器”yargs”。

yargs是适用于Node程序的解析器。
https://github.com/yargs/yargs

安装

安装可以通过npm命令进行。

npm i yargs

使用方法

以下是基本步骤的概述

    1. 需求

 

    1. 定义命令

 

    解析

代码

在这里,我想要实际编写代码。
我想要创建一个名为add的方法,并且它带有title和body这两个参数,以便我们可以以以下的形式调用它。
另外,我也想要准备一个名为list的功能。

node app.js add --title="my title" --body="message body"

因为不太长,所以我会把所有的源代码都附上。

const yargs = require('yargs')

yargs.command({
    command: 'add',
    describe : '新規にノートを追加します',
    builder: {
        title: {
            describe: 'ノートのタイトル',
            demandOption: true,
            type: 'string'
        },
        body: {
            describe: '本文',
            demandOption: true,
            type: 'string'
        }
    },
    handler(argv) {
        // TODO: write a note to storage
        console.log(`add is called. title="${argv.title}", body="${argv.body}""`)
    }
})

yargs.command({
    command: 'list',
    describe: '作成したノートの一覧を表示します',
    builder: {
        keyword: {
            describe: '検索キーワードを指定できます',
            demandOption: false,
            type: 'string'
        }
    },
    handler(argv){
        // TODO: search string from storage
        console.log(`list is called. keyword=${argv.keyword}`)
    }
})

yargs.parse()

需要注意的是 yargs.command 的部分。在这里可以定义功能、参数和实际处理流程。
如果有多个功能,可以多次使用 yargs.command 进行描述。

    • command: 機能

 

    • describe: 機能の説明

 

    • builder: パラメタを定義します。titleとすることで”–title”というオプションが追加され、demandOptionで必須かどうかを指定しています。

 

    handler: 実際の処理を記述します。この中にいろいろ書くとごちゃごちゃするので、実際の処理は外に置いて呼び出すだけにしましょう

在这里我们添加了两个功能,分别是添加(add)和列举(list)。
在最后的parse()函数中,准备工作已经完成。

进行实验。

我将检查它是否正常工作。首先,确认添加功能。它正常运转。

>node app.js add --title="hello" --body="my mseeage"
add is called. title="hello", body="my mseeage"

让我们看看如果不指定必需参数会发生什么。

>node app.js add --title="hello"
app2.js add

新規にノートを追加します

オプション:
  --help     ヘルプを表示                                                 [真偽]
  --version  バージョンを表示                                             [真偽]
  --title    ノートのタイトル                                    [文字列] [必須]
  --body     本文                                                [文字列] [必須]

必須の引数が見つかりません: body

会显示错误信息,告知缺少了什么。

我将尝试检查第二个功能列表是否可用。

>node app.js list                  
list is called. keyword=undefined

已调用list处理程序。此外,由于”keyword”参数是可选的,因此不指定也不会产生错误。

帮助功能自动添加非常方便。

>node app.js --help    
app.js [コマンド]

コマンド:
  app.js add   新規にノートを追加します
  app.js list  作成したノートの一覧を表示します

オプション:
  --help     ヘルプを表示                                                 [真偽]
  --version  バージョンを表示                                             [真偽]

汇总

Node在Web的后端使用得很多,但是学到的知识有时候会感觉有点浪费,所以当你想要制作一个简单的工具脚本的时候,它非常方便。请尝试一下。

bannerAds