yargs处理异常参数的坑

yargs(官方地址) 是一个比较好用的 node 命令行参数处理工具。他可以让我们摆脱处理参数的麻烦。最近做一个项目的工作流改进用到了这个库,遇到了一个坑,在这里记录一下。

接受用户输入的参数时候需要对必要的参数进行检查,如果没有输入则需要结束流程,并提示用户传入所需参数。按照 yargs 的文档来看应该这样做

1
2
3
4
5
6
7
var argv = require('yargs')
.usage('Usage: $0 <command> [options]')
.demandOption('p', 'command -p is needed')
.demandCommand(1, 'command -p is needed')
.help('h')
.alias('h', 'help')
.argv;

但是这样做并不起作用,当我们不传参数直接执行命令的时候,依然直接跑了下去。这并不符合我们的预期,在多方查找之后,终于在 yargs 的 issue 里面发现了这个解决方案。

简单来讲,这个解决方案就是叫我们在配置的时候加一个选项

1
.global('p')

这个选项的意思是,在命令执行后继续保留这个参数(蛤?),这样就可以解决这个问题了。