【问题标题】:Why is . passed as argument to npm without -- delimiter?为什么是 。作为参数传递给没有 -- 分隔符的 npm?
【发布时间】:2023-03-18 06:14:01
【问题描述】:

我无法弄清楚为什么 npm 使用 . 而没有 -- 分隔符。

在以下命令中,. 被传递给 test 脚本,没有 -- 分隔符。

npm test .

test 脚本在package.json 中定义如下:

"test": "react-app-rewired test"

将常规参数传递给test 脚本

当我尝试将 --coverage 传递给 npm test 时发生这种情况,但后来我发现要将参数传递给 npm 脚本,我需要在任何后续参数之前使用 --

如果我想传递参数,这就是有效的:

npm test -- --coverage

但这不会通过--coverage 参数

npm test --coverage

问题是为什么 . 在没有 -- 的情况下通过。根据 npm 文档将任何参数传递给我们需要使用 -- 分隔符的脚本,npm 将知道以下标志/参数适用于 test 脚本或我们想要参数化的任何其他脚本。

【问题讨论】:

  • 你能澄清一下你在哪里收到/没有收到这些论点吗?您如何判断一个有效而另一个无效?
  • 我编辑了我的问题以提供更多背景信息。告诉我这是否更有意义。
  • 注意位置参数和选项的区别:stackoverflow.com/questions/36495669/…
  • 啊哈。如果我得到正确的 ti,.npm 命令的选项吗?但在我的情况下,它也是 npm test 包装的测试命令的参数
  • 基本上,句点 (.) 不会被解释为选项,因为它不以连字符 (-) 开头。

标签: reactjs npm arguments npm-scripts react-scripts


【解决方案1】:

正如Charles Duffy 在他对this question 的回答中解释的那样(强调我的):

双连字符 (--) 作为一个参数本身是标准化的 所有 UNIX 命令:这意味着应该处理更多的参数 作为位置参数,而不是选项。

回答您的问题:
. 作为位置参数传递给 react-app-rewired 脚​​本,因为您在运行 npm test . 时将其作为位置参数提供。
--something 将被 npm 解释为一个单独的选项,除非它在某些时候以 -- 为前缀,在这种情况下,它也将被视为位置参数。

有关命令选项、参数和参数之间区别的更详细说明,请参阅this SO question

【讨论】:

  • 你说; “因此 npm test . 等价于 npm test -- --.npm test -- --coverage 将等价于 npm test coverage。但是,您给出的可比较示例都不是等效的。在您的第一个示例中,使用脚本/命令将接收其中一个; .--.。在您的第二个示例中,消费脚本/命令将收到; --coveragecoverage.
  • 您说得对,感谢您指出这一点。我相信更新的版本应该是正确的
  • @whme 为了测试你的假设,我建议将 package.json 中的 test 脚本定义为 "test": "node test.js"。在 test.js 中添加以下代码行 console.log(process.argv);。它记录了脚本通过使用process.argv 接收的命令行参数数组。您会看到更新后的比较也不等价。 npm test '--.' 中的 '--.'npm test '--coverage' 中的 '--coverage' 由 npm (未传递给脚本/cmd) 使用,因为即使它们被引用,它们也以连字符开头。
猜你喜欢
  • 2020-01-16
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2018-06-27
相关资源
最近更新 更多