node.js 如何完美的从命令行接收参数所传递进来的值

比如在很多php py 文件中!都会从命令行接受参数的值并带入程序中!
我也想用node.js这么写 我目前是这样写的 感觉太费劲了!

var options = process.argv;
for(var i=0;i<canshu.length;i++)
{
    if(options[i].indexOf("-string")==0)
  {
        。。。。。
  }
    else if(options[i].indexOf("--start")==0)
  {
    ........
  }
}

感觉这样好费劲 有什么更加好一点的方法没?

阅读 51.2k
评论
    5 个回答

    看看tj大神的commander.js

    https://github.com/visionmedia/commander.js

    代码示例

    #!/usr/bin/env node
    
    /**
     * Module dependencies.
     */
    
    var program = require('commander');
    
    program
      .version('0.0.1')
      .option('-p, --peppers', 'Add peppers')
      .option('-P, --pineapple', 'Add pineapple')
      .option('-b, --bbq', 'Add 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');
    if (program.pineapple) console.log('  - pineapple');
    if (program.bbq) console.log('  - bbq');
    console.log('  - %s cheese', program.cheese);
    

      楼上提到的commander是专门用来写CLI的了,如果你只是需要一个专门parse命令行参数的包,可以用substack的optimist: https://npmjs.org/package/optimist

        注意在下面的程序是不可少的。 @0x_Jin 你看看这篇文章的写法
        http://witcheryne.iteye.com/blog/1196170

        #!/usr/bin/env node
        
        var program = require('commander');
        
        function range (val) {
            return val.split('..').map(Number);
        }
        
        function list (val) {
            return val.split(',')
        }
        
        //定义参数,以及参数内容的描述
        program
            .version('0.0.1')
            .usage('[options] [value ...]')
            .option('-m, --message <string>', 'a string argument')
            .option('-i, --integer <n>', 'input a integet argument.', parseInt)
            .option('-f, --float <f>', 'input a float arg', parseFloat)
            .option('-l, --list <items>', 'a list', list)
            .option('-r, --range <a>..<b>', 'a range', range)
        
        //添加额外的文档描述
        program.on('help', function() {
            console.log('   Examples:')
            console.log('')
            console.log('       # input string, integer and float')
            console.log('       $ ./nodecmd.js -m \"a string\" -i 1 -f 1.01')
            console.log('')
        
            console.log('       # input range 1 - 3')
            console.log('       $ ./nodecmd.js -r 1..3')
            console.log('')
        
            console.log('       # input list: [1,2,3]')
            console.log('       $ ./nodecmd.js -l 1,2,3')
            console.log('')
        });
        
        //解析commandline arguments
        program.parse(process.argv)
        
        //输出结果
        console.info('--messsage:')
        console.log(program.message);
        
        console.info('--integer:')
        console.log(program.integer)
        
        console.info('--range:')
        console.log(program.range)
        
        console.info('--list:')
        console.log(program.list)
        

            evn.js

            #!/usr/bin/env node
            
            // 简单版本, 根据需要自己修改下
            function Program() {
              let $argvs = []
              let _this = this
              
              this.options = function (argv) {
                $argvs.push(argv)
                return this
              }
              this.getOptions = function () {
                console.log($argvs.toString());
              }
              this.parse = function (processArgv) {
                $argvs.forEach(item => {
                  let option = item.toLocaleLowerCase()
                  _this[option] = (function () {
                    let index = processArgv.indexOf(option)
                    if (index === 2) {
                      return true
                    } else if (index  !== -1) {
                      console.log('您需要的参数应该是执行文件后的第一个参数');
                      return false
                    } else {
                      return false
                    }
                  })()
                })
              }
            }
            
            // 使用方法
            let program = new Program()
            
            // 定义参数
            program.options('prod').options('dev').parse(process.argv)
            
            if (program.prod) {
              console.log('--prod');
              // todo 执行相关任务
            }
            if (program.dev) {
              console.log('--dev')
              // todo 执行相关任务
            }

            终端下执行:
            $ chmod 755 env.js
            $ env.js dev prod
            --prod


            更多有意思的方式可参考阮一峰的博客

            http://www.ruanyifeng.com/blo...

              撰写回答

              登录后参与交流、获取后续更新提醒

              相似问题
              推荐文章