commander.js
參考鏈接:
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: i3多少钱啊?
- 下一篇: 治疗耳鸣大约需要多少钱?