【问题标题】:What does -- do when running an npm command?运行 npm 命令时 -- 做什么?
【发布时间】:2017-08-20 04:32:01
【问题描述】:

例如,双破折号或两个连字符-- 的用法如下:

npm test -- --coverage

在没有双破折号标志的情况下运行npm 不会在覆盖模式下运行,因此它似乎附加了后续标志,这是正确的吗?我找不到这方面的文档。

【问题讨论】:

    标签: bash 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
      

      所以,似乎有一个错误?

      【讨论】:

        猜你喜欢
        • 2014-11-17
        • 2013-05-01
        • 1970-01-01
        • 2014-08-01
        • 2019-01-25
        • 2021-10-05
        • 2021-01-25
        • 2023-04-03
        • 1970-01-01
        相关资源
        最近更新 更多