前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >yargs记流水账

yargs记流水账

原创
作者头像
蒙古上单2
发布2024-04-07 19:30:52
790
发布2024-04-07 19:30:52
举报
文章被收录于专栏:第二蒙古上单第二蒙古上单

yargs是nodejs下一款方便易用的命令行工具。

例1:初见

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
    .argv;
console.log(argv);

执行:(注意3种传参方式

代码语言:shell
复制
./test.js -a 111 -b=222 --c=333

返回结果:

代码语言:json
复制
{ _: [], a: 111, b: 222, c: 333, '$0': 'test0.js' }

例2:别名、必选、默认值、参数说明

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
    //参数别名
    .alias('s', 'src')
    .alias('d', 'dst')
    //必选参数
    .demandOption(['s', 'd'], 's 与 d 必须填写')
    //默认值
    .default('s', 'a.txt')
    //说明,在--help时会打印出来
    .describe('s', '源文件')
    .describe('d', '目标文件')
    .argv;
console.log(argv);

执行:

代码语言:shell
复制
./test.js

输出结果:

代码语言:shell
复制
选项:
      --help     显示帮助信息                                             [布尔]
      --version  显示版本号                                               [布尔]
  -s, --src      源文件                                 [必需] [默认值: "a.txt"]
  -d, --dst      目标文件                                                 [必需]

缺少必须的选项:d
s 与 d 必须填写

例3:option

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
  //逐个参数配置
  .option('s', {
    alias: 'src',
    demandOption: true,
    default: 'a.txt',
    describe: '源文件',
    type: 'string'
  })
  .option('d', {
    alias: 'dst',
    demandOption: true,
    default: 'b.txt',
    describe: '目标文件',
    type: 'string'
  })
  .argv;
console.log(argv);

执行:

代码语言:shell
复制
./test.js

结果:

代码语言:json
复制
{
  _: [],
  s: 'a.txt',
  src: 'a.txt',
  d: 'b.txt',
  dst: 'b.txt',
  '$0': 'test.js'
}

例4:bool

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
  .alias('s', 'save')
  //将参数设置为bool,只有传入"false"才行
  .boolean(['s'])
  .argv;
console.log(argv);

执行:

代码语言:shell
复制
./test.js -s false

结果:

代码语言:json
复制
{ _: [], s: false, save: false, '$0': 'test.js' }

说明:只有传"false"才能设置为false。传0、"False"都会被变成true。

例5:usage、example、epilog、help

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
  .alias('s', 'save')
  .demandOption(['s'], 's必须填写')
  //使用方法
  .usage('Usage: --s <filename>')
  //示例
  .example('--s a.txt', '设置源文件')
  //在结尾显示(别名epilogue)
  .epilog('copyright')
  //帮助信息
  .help('info')
  .argv;
console.log(argv);

执行:

代码语言:shell
复制
./test.js

显示:

代码语言:shell
复制
Usage: --s <filename>

选项:
      --version  显示版本号                                               [布尔]
      --info     显示帮助信息                                             [布尔]
  -s, --save                                                              [必需]

示例:
  --s a.txt  设置源文件

copyright

缺少必须的选项:s
s必须填写

例6:严格模式strict

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
    .alias('s', 'src')
    //严格模式:如果有无法识别的参数,会提示
    .strict()
    .argv;
console.log(argv);

执行:

代码语言:shell
复制
./test5.js -a 123123

显示:

代码语言:shell
复制
选项:
  --help     显示帮助信息                                                 [布尔]
  --version  显示版本号                                                   [布尔]

无法识别的选项:a

例7:demandCommand和wrap

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
    .alias('s', 'src')
    //需传入的命令数量
    .demandCommand(1, '最少输入一个参数')
    //设置输出内容的宽度。一般不需要设置
    .wrap(yargs.terminalWidth())
    .argv;
console.log(argv);

demandCommand命令是指不带-或--前缀的参数。

例如:

代码语言:shell
复制
./test.js start

结果:

代码语言:json
复制
{ _: [ 'start' ], '$0': 'test.js' }

如果这样执行:

代码语言:shell
复制
./test.js -start

则会出错:

代码语言:shell
复制
选项:
  --help     显示帮助信息                                                                                                    [布尔]
  --version  显示版本号                                                                                                      [布尔]

最少输入一个参数

wrap可以设置显示宽度,下面显示区别:

例8:参数分组

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
    .option('a', {describe: '我是aaa', type: 'string'})
    .option('b', {describe: '我是bbb', type: 'string'})
    .option('c', {describe: '我是ccc', type: 'string'})
    .option('d', {describe: '我是dd', type: 'string'})
    .option('e', {describe: '我是eee', type: 'string'})
    .group(['a', 'b'], 'dev参数:')
    .group(['c', 'd'], 'test参数:')
    .group(['e'], 'idc参数:')
    .argv;
console.log(argv);

执行:

代码语言:shell
复制
./test.js --help

结果:

代码语言:shell
复制
dev参数:
  -a  我是aaa                                                           [字符串]
  -b  我是bbb                                                           [字符串]

test参数:
  -c  我是ccc                                                           [字符串]
  -d  我是dd                                                            [字符串]

idc参数:
  -e  我是eee                                                           [字符串]

选项:
      --help     显示帮助信息                                             [布尔]
      --version  显示版本号                                               [布尔]

例9:command命令

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
    .command(
        'start [port]', //命令,其中的port看后面定义
        '在端口[port]上启动服务', //描述
        (yargs) => { //builder,执行command前的处理
            //这里的positional可以换成option.positional不能用在外层,而option没有此限制.
            yargs
                .positional('port', {
                    describe: '端口号',
                    default: 3000
                })
        },
        (argv) => {//handler,执行命令
            console.info(`start server on :${argv.port}`)
        }
    )
    .argv;
console.log(argv);

执行:

代码语言:shell
复制
./test.js --help

结果:

代码语言:shell
复制
test8.js [命令]

命令:
  test8.js start [port]  在端口[port]上启动服务

选项:
  --help     显示帮助信息                                                 [布尔]
  --version  显示版本号                                                   [布尔]

用对象方式定义command:

代码语言:js
复制
let argv = yargs
    .command({
        command: 'start [port]',
        describe: '在端口[port]上启动服务',
        builder: (yargs) => {
            yargs
                .positional('port', {
                    describe: '端口号',
                    default: 3000
                })
        },
        handler: (argv) => {
            console.info(`start server on :${argv.port}`)
        }
    })
    .argv;
console.log(argv);

例10:array数组

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
    .alias('n', 'names')
    //定义n是数组
    .array('n')
    .argv;
console.log(argv);

执行:

代码语言:shell
复制
./test.js -n 111 222 333 444

结果:

代码语言:json
复制
{
  _: [],
  n: [ 111, 222, 333, 444 ],
  names: [ 111, 222, 333, 444 ],
  '$0': 'test9.js'
}

例11:choices取值范围

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
    .alias('s', 'sortType')
    //定义s取值范围,如果传入的不在范围里,会提示错误
    .choices('s', ['asc', 'desc'])
    .argv;
console.log(argv);

执行:

代码语言:shell
复制
./test10.js -s aaa

结果:

代码语言:shell
复制
选项:
  --help     显示帮助信息                                                 [布尔]
  --version  显示版本号                                                   [布尔]

无效的选项值:
  选项名称: s, 传入的值: "aaa", 可选的值:"asc", "desc"

例12:commandDir

代码语言:js
复制
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
    //加载目录下的命令
    .commandDir('subCommand')
    .commandDir('subCommand/subsub')
    .argv;
console.log(argv);

新建文件 subCommand/test1.js:

代码语言:js
复制
exports.command = 'test1 [dir]'
exports.desc = '测试1'
exports.builder = {
  dir: {
    default: '.'
  }
}
exports.handler = function (argv) {
  console.log('init called for dir', argv.dir)
}

新建文件 subCommand/test2.js:

代码语言:js
复制
exports.command = 'test2 [dir]'
exports.desc = '测试2'
exports.builder = {
  dir: {
    default: '.'
  }
}
exports.handler = function (argv) {
  console.log('init called for dir', argv.dir)
}

新建文件 subCommand/subsub/test3.js:

代码语言:js
复制
exports.command = 'test3 [dir]'
exports.desc = '测试3'
exports.builder = {
  dir: {
    default: '.'
  }
}
exports.handler = function (argv) {
  console.log('init called for dir', argv.dir)
}

执行:

代码语言:shell
复制
./test.js --help

结果:

代码语言:shell
复制
test.js [命令]

命令:
  test11.js test1 [dir]  测试1
  test11.js test2 [dir]  测试2
  test11.js test3 [dir]  测试3

选项:
  --help     显示帮助信息                                                 [布尔]
  --version  显示版本号                                                   [布尔]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 例1:初见
  • 例2:别名、必选、默认值、参数说明
  • 例3:option
  • 例4:bool
  • 例5:usage、example、epilog、help
  • 例6:严格模式strict
  • 例7:demandCommand和wrap
  • 例8:参数分组
  • 例9:command命令
  • 例10:array数组
  • 例11:choices取值范围
  • 例12:commandDir
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com