什么 - 运行npm命令时做什么?

时间:2017-03-27 12:46:32

标签: bash npm

例如,使用双短划线或两个连字符--,如下所示:

npm test -- --coverage

在没有双破折号标志的情况下运行npm不会在覆盖模式下运行,所以它似乎附加后续标志,这是正确的吗?我无法找到相关文档。

2 个答案:

答案 0 :(得分:13)

--作为一个参数本身在所有UNIX命令中都是标准化的:它意味着进一步的参数应该被视为位置参数,而不是选项。请参阅POSIX Utility Syntax Conventions中的指南10。

为了给你一个非基于NPM的例子,ls -- -l将查找名为-l的文件,因为--指定所有后续参数都是位置的。

在这种情况下,这意味着--coverage不是npm本身的论据;据推测,它随后由test子命令读取。对于遵循惯例正确的工具,这不是必需的,因为指南9规定所有选项应在任何参数之前给出(因此在此上下文中--coverage应该被认为是一个论点,因为它来自论证test);但是,由于NPM仅部分遵循指导原则,这是可预见的结果。

(长--option - 样式选项实际上是一个整体的GNU扩展,所以我们在这里有多种解析风格的错误;不幸的是生活就这样。)

答案 1 :(得分:0)

我做了进一步的挖掘;根据{{​​3}}-

  

“-”表示节点选项的结尾。将其余的参数传递给脚本。如果在此之前未提供脚本文件名或eval / print脚本,则下一个参数将用作脚本文件名。

但是,一个简单的脚本包含-

console.log(`process.execArgv:${process.execArgv}`);
console.log(`process.argv:${process.argv}`);

表现为-

>node --prof argv.js --myArg
process.execArgv:--prof
process.argv:C:\Program Files\nodejs\node.exe,C:\Dev\Web\QA_Web_POC\argv.js,--myArg

>node --prof argv.js -- --myArg
process.execArgv:--prof
process.argv:C:\Program Files\nodejs\node.exe,C:\Dev\Web\QA_Web_POC\argv.js,--, --myArg

>node argv.js --prof -- --myArg
process.execArgv:
process.argv:C:\Program Files\nodejs\node.exe,C:\Dev\Web\QA_Web_POC\argv.js,--prof,--,--myArg

>node argv.js -- --prof --myArg
process.execArgv:
process.argv:C:\Program Files\nodejs\node.exe,C:\Dev\Web\QA_Web_POC\argv.js,--,--prof,--myArg

那么,似乎有一个错误吗?