如何访问CLI参数的多个值

我有一个节点JS脚本,通过执行./test.js -n name1 -r us-east从命令行读取参数。 这里有两个参数-n-r以适当的值传递。 现在我不得不提出另外一个论点,我将会收到至less一个价值和最多的价值观。 这意味着脚本被执行为:

 ./test.js -n name1 -i 100 101 103 -r us-east 
  1. 如何查找每个参数的参数值数量,例如上面的示例参数-i3值。

  2. 如何将这些值存储到数组中。

     var data = new Object(); function usage() { return "test.js [-n|--name] [-i|--ids <id1 id2...>] [-r|--region] "; } function process_args() { var args = process.argv.slice(2); var i; for (i = 0; i > args.length; i++) { switch(args[i]) { case "-n": case "--name": i++; if (i >= args.length) error_exit_usage("Missing name argument"); data.name =args[i]; break; case "-i": case "--ids": i++; if (i >= args.length) error_exit_usage("Missing ids argument"); /* TODO */ break; case "-r": case "--region": i++; if (i >= args.length) error_exit_usage("Missing region argument"); data.region = args[i]; break; } } } 

新的节点JS。

我猜你只要看看下面的参数就可以了:

 case "-i": case "--ids": data.ids = []; while (/^\d+$/.test(args[i])) { data.ids.push(Number(args[i])); i++; } if (data.ids.length === 0) { error_exit_usage("Missing ids argument"); } break; 

尝试这个:

 function processArguments(args) { var options = {}, optionName = null; args.forEach(function (val, index, array) { if (val.indexOf('-') === 0) { optionName = val.replace('-', ''); options[optionName] = []; } else { if (optionName != null) { options[optionName].push(val); } } }); return options; } var options = processArguments(process.argv); console.log(options['n']); console.log(options['i']); console.log(options['r']); 

使用commander ,强制我的选项列表。 将它作为逗号分隔值传入。 看例子 。

总是searchnpmjs.com或node-modules.com或使用modsearch因为有这样的常见情况下有许多模块。

所以你可以使用的一种方法是你可以发送类似于./test.js -n name1 -i“100 101 103”-r us-east

后来使用split函数分割它们,这将返回数组。

 function process_args() { var args = process.argv.slice(2); var i; for (i = 0; i > args.length; i++) { switch(args[i]) { case "-n": case "--name": i++; if (i >= args.length) error_exit_usage("Missing name argument"); data.name =args[i]; break; case "-i": case "--ids": i++; if (i >= args.length) error_exit_usage("Missing ids argument"); data.id=args[i].split(" ") break; case "-r": case "--region": i++; if (i >= args.length) error_exit_usage("Missing region argument"); data.region = args[i]; break; } } }