commander.js

摘要:
参考链接:http://yijiebuyi.com/blog/2cd3833e8551a302b4ec645031bfd3d0.htmlhttp://blog.gejiawen.com/2016/09/21/make-a-node-cli-program-by-commander-js/https://github.com/tj/commander.js/blob/master/Readme_zh

参考链接:

http://yijiebuyi.com/blog/2cd3833e8551a302b4ec645031bfd3d0.html

http://blog.gejiawen.com/2016/09/21/make-a-node-cli-program-by-commander-js/

https://github.com/tj/commander.js/blob/master/Readme_zh-CN.md

.option('-l, --langu', 'website langueage')

-l如果是命令的简写,必须是一个字母,多了也会报错。

program
.version('0.1.0')
.option('-p, --peppers', 'Add peppers')
.option('-P, --pineapple', 'Add pineapple')
// 这个option里面参数
// 命令简写,命令全拼,命令描述
.option('-b, --bbq-sauce', 'Add bbq sauce')
//  [type] 是option的第三个参数形参,option的第三个参数是实参
.option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
.parse(process.argv);

console.log('you ordered a pizza with:');
if (program.peppers) console.log(' - peppers');
if (program.pineapple) console.log(' - pineapple');
if (program.bbqSauce) console.log(' - bbq');
console.log(' - %s cheese', program.cheese);
 
并且:

bosszhang@bogon bin $ node macaw.js c
program.cheese: marble
you ordered a pizza with:
- marble cheese
bosszhang@bogon bin $ node macaw.js -c
you ordered a pizza with:
- marble cheese
bosszhang@bogon bin $ node macaw.js cheese
you ordered a pizza with:
- marble cheese
bosszhang@bogon bin $ node macaw.js --cheese
you ordered a pizza with:
- marble cheese

这几个的效果一样。

var program = require('commander');

program
.version('0.1.0')
.option('-p, --peppers', 'Add peppers')
.option('-P, --pineapple', 'Add pineapple')
.option('-b, --bbq-sauce', 'Add bbq sauce')
.option('-n, --no-bbq-sauce', 'remove bbq sauce')
.option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
.parse(process.argv);

console.log('you ordered a pizza with:');
if (program.peppers) console.log(' - peppers');
else console.log(' without peppers');
if (program.pineapple) console.log(' - pineapple');
else console.log(' without pineapple');
if (program.bbqSauce) console.log(' - bbq');
else console.log(' without bbq');
console.log(' - %s cheese', program.cheese);
 

bosszhang@bogon bin $ node macaw.js --no-bbq-sauce
you ordered a pizza with:
without peppers
without pineapple
without bbq
- marble cheese
bosszhang@bogon bin $ node macaw.js --bbq-sauce
you ordered a pizza with:
without peppers
without pineapple
without bbq
- marble cheese

说明只要加上

.option('-n, --no-bbq-sauce', 'remove bbq sauce')

这条命令不管是

no-bbq-sauce 命令,还是no-bbq-sauce命令,都只会执行

else console.log(' without bbq');

这个语句。

比如说:

var program = require('commander');

program
.option('--no-sauce', 'Remove sauce')
.parse(process.argv);

console.log('you ordered a pizza');
if (program.sauce) console.log(' with sauce');
else console.log(' without sauce');

bosszhang@bogon bin $ node macaw.js
you ordered a pizza
with sauce

bosszhang@bogon bin $ node macaw.js no-sauce
you ordered a pizza
with sauce
bosszhang@bogon bin $ node macaw.js --no-sauce
you ordered a pizza
without sauce

bosszhang@bogon bin $ node macaw.js s
you ordered a pizza
with sauce

说明:

不识别的命令执行的也是

console.log(' without sauce');

/*****************************************/

var program = require('commander');

program
.option('--sauce', 'Remove sauce')
.option('--no-sauce', 'Remove sauce')
.parse(process.argv);

console.log('you ordered a pizza');
if (program.sauce) console.log(' with sauce');
else console.log(' without sauce');
 

bosszhang@bogon bin $ node macaw.js --sauce
you ordered a pizza
without sauce

bosszhang@bogon bin $ node macaw.js sauce
you ordered a pizza
with sauce
bosszhang@bogon bin $ node macaw.js no-sauce
you ordered a pizza
with sauce

说明:

同时出现,跟顺序有关,只会执行后出现的那个命令。

--sauce 和 --no-sauce

命令

--sauce 将不起作用。

即使执行也是执行--no-sauce

/*****************************************/

var program = require('commander');

program
.command('rm <dir>')
.option('-r, --recursive', 'Remove recursively')
.action(function (dir, cmd) {
console.log('remove ' + dir + (cmd.recursive ? ' recursively' : ''))
})

program.parse(process.argv)
 

bosszhang@bogon bin $ node macaw.js rm dir
remove dir
bosszhang@bogon bin $ node macaw.js rm dir --recursive
remove dir recursively

说明:

command可以接受输入命令,反正都是process.arg数组的process.arg[2],以后的值

process.argv: [ '/Users/bosszhang/.nvm/versions/node/v6.2.0/bin/node',
'/Users/bosszhang/Documents/workspace_temp/test-cli/bin/macaw.js',
'rm',
'dir',
'--recursive' ]

当一个Nodejs程序运行时,会有许多存在内存中的全局变量,其中有一个叫做process,意为进程对象。process对象中有一个叫做argv的属性。命令行程序的第一个重头戏就是解析这个process.argv属性。

看起来process.argv好像是一个数组,其中第一个元素是node的执行路径,第二个元素是当前执行文件的路径,从第三个元素开始,是执行时带入的参数

 option

用户:.option('-n, --name <name>', 'your name', 'GK')

  • 第一个参数是选项定义,分为短定义和长定义。用|,连接。
    • 参数可以用<>或者[]修饰,前者意为必须参数,后者意为可选参数。
  • 第二个参数为选项描述
  • 第三个参数为选项参数默认值,可选。

commander.version 可以指定当前应用程序的一个版本号.

usage  指定使用方法,这里让我们输入一直值.

option 指定参数,格式,及参数说明.

/*****************************************/

const program = require('commander')
program.usage('<project-name>').parse(process.argv)
console.log('process.argv: ',process.argv)
console.log('program.args: ',program.args)
// 根据输入,获取项目名称
let projectName = program.args[0]
if (!projectName) { // project-name 必填
// 相当于执行命令的--help选项,显示help信息,这是commander内置的一个命令选项
program.help()
return
}
go()
function go () {
// 预留,处理子命令
}
 

bosszhang@bogon test-cli $ node ./bin/macaw-init.js aaa
process.argv: [ '/usr/local/bin/node',
'/Users/bosszhang/Documents/workspace_temp/test-cli/bin/macaw-init.js',
'aaa' ]
program.args: [ 'aaa' ]

说明:

program.usage('<project-name>').parse(process.argv) 会获取process.argv[2]参数。

commander.js第1张

macaw.js 和 macaw-init.js 和 macaw-hello.js是有关联的

const program = require('commander') // npm i commander -D
program.version('1.0.0')
.usage('<command> [项目名称]')
.command('zzz', 'description') // 什么吗?必须是hello,第二个参数是描述?
.parse(process.argv)
 
当输入上面的命令的时候

bosszhang@bogon test-cli $ node ./bin/macaw.js zzz

macaw-zzz(1) does not exist, try --help

提示说不存在,说明

输入什么就会执行相应的文件

node ./bin/macaw.js init就执行macaw-init.js

node ./bin/macaw.js hello就执行macaw-hello.js

说明:

.command('hello', 'description')
 
这是一条神奇的命令
它会执行当前文件夹-process.argv[2].js的文件

这条命令

program.usage('<project-name>').parse(process.argv)
可以接受参数
其中:

process.argv: [ '/usr/local/bin/node',
'/Users/bosszhang/Documents/workspace_temp/test-cli/bin/macaw-init.js',
'aa' ]

使用完

program.usage('<project-name>').parse(process.argv)

再使用

let projectName = program.args[0]
会得到

program.args: [ 'aa' ]

如果在那条命令之前,则:

program.args: undefined

免责声明:文章转载自《commander.js》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇第4章 探索性数据分析(多因子与复合分析)adb命令——简单常用命令介绍:将文件从手机上传输到电脑里:adb pull /sdcard/123.png c:usersdeldesktop下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS7.X)和ossec-agent(CentOS7.X))(图文详解)

OSSEC是一款开源的基于主机的入侵检测系统,可以简称为HIDS。它具备日志分析,文件完整性检查,策略监控,rootkit检测,实时报警以及联动响应等功能。详细的介绍和文档可以参考官网网站:http://www.ossec.net/环境本文中的环境极其简单,两台CentOS7虚拟机。CentOS7的安装详解服务端:  计算机名:ossec-server  I...

收集vcftools所有用法

VCFtools用来处理VCF文档。vcftools--vcftest.vcflesstest.vcf|vcftools--vcf-Applyingafilter可以把筛选的突变写入一个新文件。--recode表示输出筛选的内容,--recode-INFO-all保留所有的INFOfields的内容。default情况下,INFOfields不写,因为筛选会...

怎么使用vscode合并分支

1.切换分支到本地开发2.代码完成后提交代码到本地仓库3.切换分支到需要merge的test分支先pull一下,之后再合并分支—我开发的是这个feature,就合并这个分支4.当合并分支后,需要重新提交到远程:点击一下,直接提交...

Linux系统glibc库版本信息查看

有时我们经常需要检查当前系统的glibc版本。您可以按如下方式进行检查:/lib/libc。所以。6有时:/lib/x86-64-linux/libc。因此6.将文件作为命令执行。为什么库可以直接运行?Glibc是gnu发布的libc库,即c运行时。glibc是linux系统中最低级别的api,几乎任何其他运行时都将依赖glibc。Gcc和libc是相互依赖...

linux下ifconfig, DNS以及route配置

Linux基本网络配置命令1.ifconfig查看网络接口信息。普通用户使用的ifconfig的完整路径:/sbin/ifconfigifconfig网络接口名称:显示指定接口的详细信息。...