zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    nginx $remote_addr 详解
    Alipay SDK验签PHP低于5.5版本错误
    Alipay支付宝调用错误:Call to undefined function openssl_sign()
    nginx.conf 下日志host.access.log 说明
    vim全选,全部复制,全部删除
    jquery 获取上传文件大小
    linux网络配置
    crontab 定时任务简单备份数据库
    linux进程管理
    mysql 动态增加列,查找表中有多少列,具体什么列。 通过JSON生成mysql表 支持子JSON
  • 原文地址:https://www.cnblogs.com/zhangzs000/p/9301373.html
Copyright © 2011-2022 走看看