【发布时间】:2017-08-20 04:32:01
【问题描述】:
例如,双破折号或两个连字符-- 的用法如下:
npm test -- --coverage
在没有双破折号标志的情况下运行npm 不会在覆盖模式下运行,因此它似乎附加了后续标志,这是正确的吗?我找不到这方面的文档。
【问题讨论】:
例如,双破折号或两个连字符-- 的用法如下:
npm test -- --coverage
在没有双破折号标志的情况下运行npm 不会在覆盖模式下运行,因此它似乎附加了后续标志,这是正确的吗?我找不到这方面的文档。
【问题讨论】:
-- 本身作为一个参数在所有 UNIX 命令中都是标准化的:这意味着进一步的参数应该被视为位置参数,而不是选项。请参阅POSIX Utility Syntax Conventions 中的准则 10。
举个非基于 NPM 的示例,ls -- -l 将查找名为 -l 的文件,因为 -- 指定所有后续参数都是位置参数。
在这种情况下,这意味着--coverage 不是npm 本身的选项;那么,它可能随后被test 子命令读取。对于遵循约定正确的工具,这不是必需的,因为指南 9 规定所有选项都应在任何参数之前给出(因此在这种情况下 --coverage 应被视为参数,因为它出现在参数 test) 之后;然而,由于 NPM 只是部分遵循了指导方针,这是可以预见的结果。
(长 --option-style 选项实际上是一个整体的 GNU 扩展,所以我们这里是多种解析样式的混搭;不幸的是,这就是生活)。
【讨论】:
我做了一些进一步的挖掘;根据docs for my node version -
"--" 表示节点选项的结束。将其余参数传递给脚本。如果在此之前没有提供脚本文件名或 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
所以,似乎有一个错误?
【讨论】: