例如,使用双短划线或两个连字符--
,如下所示:
npm test -- --coverage
在没有双破折号标志的情况下运行npm
不会在覆盖模式下运行,所以它似乎附加后续标志,这是正确的吗?我无法找到相关文档。
答案 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
那么,似乎有一个错误吗?