参考链接:

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]参数。

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

转载于:https://www.cnblogs.com/zhangzs000/p/9301373.html

commander.js相关推荐

  1. commander.js使用及源码分析

    commander.js commander是一个轻巧的nodejs模块,提供了用户命令行输入和参数解析强大功能. commander的特性: 自记录代码 自动生成帮助 合并短参数 默认选项 强制选项 ...

  2. commander.js基本用法

    准备工作 安装nodejs 安装commander.js,执行npm install commander --save version方法 作用:定义命令程序的版本号 参数说明: 版本号<必须& ...

  3. commander.js学习总结

    commander是用于快捷开发命令行工具,提高开发效率的工具包. 官网: https://github.com/tj/commander.js/blob/master/Readme_zh-CN.md ...

  4. commander.js教程笔记

    并非严格的教程博文,属于是个人在学习过程中的笔记心得汇总. 内容相对官方文档更通俗一些,入门新人,如果看不懂官方文档,可以大致看一看这个.有错的话请指正,标准的还得看官方文档. 1.commander ...

  5. Node.js之commander.js学习笔记

    概述 commander.js可以用来写命令行工具. 官网地址:Commander.js 安装与引入 安装 执行如下命令进行安装,但前提是有node环境,即能使用npm命令进行安装: npm inst ...

  6. 玩转 Commander.js —— 你也是命令行大师

    导语 | 最近做团队底层构建工具架构升级和命令行交互打了不少交道,再加上在研究 Vue-CLI 的源码,觉得 Commander.js 作为 Node.js 下这么优秀的命令行交互工具,值得总结一下, ...

  7. Node 系列 - 003 - commander.js

    ----------☆☆☆---------- Node 系列相应地址: 代码仓库:https://github.com/LiangJunrong/all-for-one 文章仓库:https://g ...

  8. Commander.js中-h或help命令使用问题

    Commander.js中-h或help命令使用问题 program.usage() 中出现index 问题描述 & 现象 在使用commandName -h命令时(这里的commandNam ...

  9. commander.js之option、command、version

    commander 快速开始 option(选项) command(指令) version(版本) 本文档主要是要针对需要开发脚手架进行使用的前端开发人员所参考的文档,commander是用于脚手架开 ...

最新文章

  1. 【编译原理】如何根据EBNF编写代码?
  2. 黑客瞄准美国 ATM 机,疯狂窃取超百万美元资金
  3. Nginx 常见面试题
  4. VMware Fusion中使用迅雷的问题
  5. 【算法】经典的ML算法(后续结合工作实践完善心得)
  6. 【23】数据可视化:基于 Echarts + Python 动态实时大屏范例 - Redis 数据源
  7. 关于如何提取仙剑奇侠传4的模型
  8. w10如何共享计算机硬盘,w10共享盘怎么设置_win10如何共享硬盘
  9. 如何删除双系统中的一个系统
  10. 大数据组件监控体系构建
  11. 互联网时代如何快速提升宣传效果?
  12. (一)云计算概念了解
  13. Matlab 最优化求解
  14. 周鸿袆:教你打造十页完美商业计划书
  15. Python练习题1.变量类型练习 华氏温度转摄氏温度 圆面积周长计算 判断闰年
  16. 试证明:已知二叉树的前序序列和中序序列,可以唯一确定该二叉树
  17. java mail imap 附件下载_Java Mail 发送带有附件的邮件
  18. P1185 绘制二叉树——蒟蒻的暴力模拟
  19. 人眼到底等于多少像素
  20. 重磅:世纪大和解!阿里、腾讯生态将打通

热门文章

  1. aws lambda使用, aws无服务器部署应用。 aws ecr凭证获取和使用。
  2. 10任务栏全屏时老是弹出_Deepin 15.10 发布,深度操作系统
  3. pip install 豆瓣源、清华源、阿里源、中国科技大学源
  4. 群晖共享文件夹局域网通过SMB本地访问
  5. 阿里云服务器部署项目
  6. shell编程_linux
  7. 显卡不够时,如何训练大型网络
  8. 各种优化算法公式快速回忆优化器-深度学习
  9. 《attention is all you need》解读
  10. GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态