yargs是nodejs下一款方便易用的命令行工具,十分适合快速构建自己的小工具。
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
.argv;
console.log(argv);
执行:(注意3种传参方式)
./test.js -a 111 -b=222 --c=333
返回结果:
{ _: [], a: 111, b: 222, c: 333, '$0': 'test0.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);
执行:
./test.js
输出结果:
选项:
--help 显示帮助信息 [布尔]
--version 显示版本号 [布尔]
-s, --src 源文件 [必需] [默认值: "a.txt"]
-d, --dst 目标文件 [必需]
缺少必须的选项:d
s 与 d 必须填写
#!/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);
执行:
./test.js
结果:
{
_: [],
s: 'a.txt',
src: 'a.txt',
d: 'b.txt',
dst: 'b.txt',
'$0': 'test.js'
}
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
.alias('s', 'save')
//将参数设置为bool,只有传入"false"才行
.boolean(['s'])
.argv;
console.log(argv);
执行:
./test.js -s false
结果:
{ _: [], s: false, save: false, '$0': 'test.js' }
说明:只有传"false"才能设置为false。传0、"False"都会被变成true。
#!/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);
执行:
./test.js
显示:
Usage: --s <filename>
选项:
--version 显示版本号 [布尔]
--info 显示帮助信息 [布尔]
-s, --save [必需]
示例:
--s a.txt 设置源文件
copyright
缺少必须的选项:s
s必须填写
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
.alias('s', 'src')
//严格模式:如果有无法识别的参数,会提示
.strict()
.argv;
console.log(argv);
执行:
./test5.js -a 123123
显示:
选项:
--help 显示帮助信息 [布尔]
--version 显示版本号 [布尔]
无法识别的选项:a
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
.alias('s', 'src')
//需传入的命令数量
.demandCommand(1, '最少输入一个参数')
//设置输出内容的宽度。一般不需要设置
.wrap(yargs.terminalWidth())
.argv;
console.log(argv);
demandCommand命令是指不带-或--前缀的参数。
例如:
./test.js start
结果:
{ _: [ 'start' ], '$0': 'test.js' }
如果这样执行:
./test.js -start
则会出错:
选项:
--help 显示帮助信息 [布尔]
--version 显示版本号 [布尔]
最少输入一个参数
wrap可以设置显示宽度,下面显示区别:
#!/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);
执行:
./test.js --help
结果:
dev参数:
-a 我是aaa [字符串]
-b 我是bbb [字符串]
test参数:
-c 我是ccc [字符串]
-d 我是dd [字符串]
idc参数:
-e 我是eee [字符串]
选项:
--help 显示帮助信息 [布尔]
--version 显示版本号 [布尔]
#!/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);
执行:
./test.js --help
结果:
test8.js [命令]
命令:
test8.js start [port] 在端口[port]上启动服务
选项:
--help 显示帮助信息 [布尔]
--version 显示版本号 [布尔]
用对象方式定义command:
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);
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
.alias('n', 'names')
//定义n是数组
.array('n')
.argv;
console.log(argv);
执行:
./test.js -n 111 222 333 444
结果:
{
_: [],
n: [ 111, 222, 333, 444 ],
names: [ 111, 222, 333, 444 ],
'$0': 'test9.js'
}
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
.alias('s', 'sortType')
//定义s取值范围,如果传入的不在范围里,会提示错误
.choices('s', ['asc', 'desc'])
.argv;
console.log(argv);
执行:
./test10.js -s aaa
结果:
选项:
--help 显示帮助信息 [布尔]
--version 显示版本号 [布尔]
无效的选项值:
选项名称: s, 传入的值: "aaa", 可选的值:"asc", "desc"
#!/usr/bin/env node
const yargs = require('yargs');
let argv = yargs
//加载目录下的命令
.commandDir('subCommand')
.commandDir('subCommand/subsub')
.argv;
console.log(argv);
新建文件 subCommand/test1.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:
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:
exports.command = 'test3 [dir]'
exports.desc = '测试3'
exports.builder = {
dir: {
default: '.'
}
}
exports.handler = function (argv) {
console.log('init called for dir', argv.dir)
}
执行:
./test.js --help
结果:
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 删除。