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