【发布时间】:2021-06-25 21:12:53
【问题描述】:
我有一个接受命令行参数的 cli 脚本。
对于 pages 参数,我希望行为是:
> script.js
-> pages 参数未设置。不处理页面
> script.js -p 100
-> pages 参数设置为 100:处理 100 个页面
> script.js -p
-> pages 参数集没有值:处理无限(无论多少可用)页面
换句话说:我想给一个可选参数一个默认值。问题是我不知道如何区分用户设置的没有价值的情况和没有设置的情况。
当这样定义时:
var argv = require('yargs')
// omitted code
.alias('p', 'pages')
.describe('p', 'number of pages; infinite by default')
.default('p', -1)
.number('p')
argv.pages 始终是-1,无论我是否设置-p
当这样定义时:
.alias('p', 'pages')
.describe('p', 'number of pages; infinite by default')
.number('p')
typeof argv.pages 始终是undefined,无论我是否设置-p
如何在将参数视为可选参数的同时给出默认值;所以,没有设置的时候没有默认值,没有值的时候只有默认值。
(当然有一个解决方法:我可以通过循环 process.argv 来手动解析参数,但我想避免这种情况,因为这违背了使用 yargs 的目的)
【问题讨论】:
-
似乎它根本没有处理命令行参数。您可以尝试其他选项,看看是否是这种情况?还需要知道 yargs 版本,以及如何调用参数解析器。 (.argv, .parse, .parseSync)
-
我在描述我将命令行值留空的情况(因此,“no -p”参数与“-p without value”。如果我添加一个值(“-p 100” ) 然后它被拾取。所以它肯定会拾取命令行参数