【问题标题】:Passing arguments to Node.js program将参数传递给 Node.js 程序
【发布时间】:2019-06-05 11:55:46
【问题描述】:

我正在尝试为我正在创建的 Node.js 程序传递 2 个强制参数。

我正在使用Yargs 这样做:

const yarg = require("yargs")
.usage("hi")
.options("m", {demandOption: true})
.options("m2", {demandOption: true})
.argv;

这工作正常,有一个小问题。我想像这样激活脚本:

节点索引.js -m val -m2 val2

它不起作用,我收到一条错误消息,提示 m2 丢失。只有当我在 m2 之前添加另一个 - 时它才能工作,这意味着我必须这样做:

节点索引.js -m val1 --m2 val2

有没有办法让它像我一开始想要的那样接受参数?

【问题讨论】:

  • 如果您不使用 yargs,您可以一开始就按照自己的意愿拥有它 - 自己处理命令行参数。

标签: node.js command-line-interface command-line-arguments yargs


【解决方案1】:

你不能用 yargs 做你要求的事情,而且可以说你不应该这样做。通过查看 yargs-parser(模块 yargs 用于解析您的参数)为您提到的不同参数样式返回什么,很容易明白为什么您不能:

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>

如你所见:

  1. -m A 被解析为选项 m,值为 A
  2. -m2 B 被解析为选项 m,其值为 2,另外还有数组参数 B
  3. --m2 C 被解析为选项 m2,值为 C

没有办法让解析器表现不同。这是有充分理由的:大多数命令行工具(尽管是 Windows)都以这种方式运行。

按照几十年前的惯例,“长”选项使用两个破折号,后跟一个人类可读的名称,例如 --max-count。 “短”选项,通常是长选项的别名,使用单个破折号后跟单个字符,例如-m,并且——这是关键位——如果选项有一个值,选项和选项之间的空格值可以省略。这就是为什么当 yargs 看到 -m2 时,它假定 2m 选项的值。

如果您想使用 yargs(而不是让精通命令行的用户感到困惑),您需要将选项更改为 1.--m--m2 或 2.-m 和(例如)-n.

【讨论】:

  • 1) 是否有可能使解析器不省略名称和值之间的空格? 2)我怎样才能让用户在第一个参数之前放两个破折号?我刚刚定义了 m 并且它自动需要一个破折号......
  • @Jordan Running 所以你有答案吗?
猜你喜欢
  • 2011-05-20
  • 2018-04-29
  • 2023-03-03
  • 2018-04-14
相关资源
最近更新 更多