如何访问CLI参数的多个值
我有一个节点JS脚本,通过执行./test.js -n name1 -r us-east
从命令行读取参数。 这里有两个参数-n
& -r
以适当的值传递。 现在我不得不提出另外一个论点,我将会收到至less一个价值和最多的价值观。 这意味着脚本被执行为:
./test.js -n name1 -i 100 101 103 -r us-east
-
如何查找每个参数的参数值数量,例如上面的示例参数
-i
有3
值。 -
如何将这些值存储到数组中。
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; } } }