运行 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”是做啥用的?

当我运行任何关于 npm 的命令时如何解决问题它显示错误

Ec2 sudo 运行 npm或node时,出现找不到命令

在 Windows 上运行 npm 命令时出错:graceful-fs

npm 错误! cb() 从未调用过!尝试运行 npm install 命令时出错

尝试运行 npm start 命令时出错