为什么是 。作为参数传递给没有 -- 定界符的 npm?

Why is . passed as argument to npm without -- delimiter?

我无法弄清楚为什么 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 将知道以下 flags/arguments 用于 test 脚本或我们想要参数化的任何其他脚本.

作为Charles Duffy explains in his answer for 强调我的):

double hyphens (--) as an argument on its own is standardized across all UNIX commands: It means that further arguments should be treated as positional parameters, not options.

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

有关命令选项、参数和参数之间差异的更详细说明,请参阅