[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
使用方法
以下是基本步骤的概述
-
- 需求
-
- 定义命令
- 解析
代码
在这里,我想要实际编写代码。
我想要创建一个名为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的后端使用得很多,但是学到的知识有时候会感觉有点浪费,所以当你想要制作一个简单的工具脚本的时候,它非常方便。请尝试一下。