我正在尝试为正在创建的Node.js程序传递2个必需参数。
我正在使用Yargs
来做到这一点:
const yarg = require("yargs")
.usage("hi")
.options("m", {demandOption: true})
.options("m2", {demandOption: true})
.argv;
这可以正常工作,但有一点问题。我想这样激活脚本:
节点index.js -m val -m2 val2
它不起作用,并且我收到一条错误消息,说缺少m2。仅当我在m2之前添加另一个-
时,它才起作用,这意味着我必须这样做:
节点index.js -m val1 --m2 val2
是否有一种方法可以让它像我想的那样接受参数?
答案 0 :(得分:0)
您无法使用yargs来完成您要求的操作,并且可以说您不应该这样做。通过查看针对您提到的不同参数样式的yargs-parser(yargs模块用来解析参数)返回的结果,很容易看出为什么不能这样做:
Parent
console.log(yargsParser(['-m', 'A']));
console.log(yargsParser(['-m2', 'B']));
console.log(yargsParser(['--m2', 'C']));
如您所见:
<script src="https://bundle.run/yargs-parser@11.1.1"></script>
被解析为选项-m A
,其值为m
。A
被解析为选项-m2 B
,其值为m
,并分别解析为数组参数2
。B
被解析为选项--m2 C
,其值为m2
。没有办法使解析器的行为有所不同。这是有充分的理由的:大多数命令行工具(尽管有Windows)的行为都是这种方式。
按照数十年的惯例,“长”选项使用两个破折号后跟一个易于理解的名称,例如C
。 “短”选项通常是长选项的别名,它使用单破折号后跟单个字符,例如--max-count
,并且-这是至关重要的位-如果该选项取一个值,则该选项之间的空格并且该值可以省略。这就是为什么当yargs看到-m
时,它假定-m2
是2
选项的值。
如果您想使用yargs(而不是混淆命令行的用户),则需要将选项更改为1. m
和--m
或2。{{1 }}和(例如)--m2
。