【问题标题】:npm multiple command execution && is not working but & and || doesnpm 多个命令执行 && 不起作用,但是 & 和 ||做
【发布时间】:2020-10-30 08:43:33
【问题描述】:

我一直在尝试运行多个 npm 命令来依次运行我的一些 cypress 测试。经过一番研究,我发现在 npm 命令之间使用 &&。

package.json 文件,在脚本中我定义了一个测试,

"scripts":{
"test":"npm run cypresscommand_1 && npm run cypresscommand_2"
}

当我出于某种原因使用 npm run test 执行此操作时,npm run cypresscommand_1 被执行但 npm run cypresscommand_2 没有被执行。随着进一步的研究和一些教程的学习,后来我尝试了两个修改

修改 1:我用 && 的 insted

"scripts":{
"test":"npm run cypresscommand_1 & npm run cypresscommand_2"
}

修改 2:我使用了 && 的 insted ||

"scripts":{
"test":"npm run cypresscommand_1 || npm run cypresscommand_2"
}

令人惊讶的是,两者都给了我预期的结果,这意味着都执行了 npm run cypresscommand_1 然后 npm run cypresscommand_2

我想知道的是,

  1. 在新版本的 npm 中,他们是否将 && 替换为 & 和 ||
  2. &的意思是等于和
  3. 是||的意思等于和
  4. &和||有什么区别

虽然代码运行良好,但我想确定我是否使用了正确的语法。 有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 您的问题意味着无论run cypresscommand_1 是成功完成还是失败,您都希望npm run cypresscommand_2 运行。那是对的吗?如果是这样,您是否希望跨平台应用相同的逻辑,即在 Windows 和/或 *nix(Linux.macOS 等)操作系统上运行 npm run test 时?
  • 是的。实际上我为跨浏览器测试做了这个设置。所以,即使 chrome 失败,我也希望使用 firefox 运行测试。在任何平台上。
  • 那么您需要注意,使用分号 (;),正如您接受的答案中所建议的那样,在任何平台上的行为都不相同,因为在 Windows NPM 上使用 cmd.exe 作为执行 npm 脚本的默认 shell。请参阅我的回答here,解释cmd 中的& 运算符类似于*nixsh 中的分号;
  • 感谢您提供的信息。我用'&'来解决我的问题。在您的回答中,您说 && 被替换为 &。这是否意味着 && 不起作用或 && 现在有不同的含义?
  • && 运算符在cmd.exe (Windows)sh (*nix) 中的作用基本相同。其逻辑如下: A) 如果&& 运算符左侧的任务/命令由于某种原因失败(即以非零代码/状态退出),则任务&& 运算符右侧的 /command 被执行。 B) 如果&& 运算符左侧的任务/命令成功完成(即以零代码/状态退出),则&& 右侧的任务/命令运算符 确实 被执行。

标签: node.js bash npm cypress


【解决方案1】:

它与 npm 无关,这些在基于 Linux 的系统上被解释为 bash 命令,

& - 表示它将作为后台作业运行,

&& - 每个命令的退出代码并将其用作链式 && 操作中的操作数。

| - 是一个管道运算符,其中一个命令的输出将传递给以下命令,

|| - OR 逻辑运算符,如果一对中只有一个完成,则让 Bash 继续处理链式命令。

对于您的情况,您可以尝试使用分号 ';'即使失败,它也会一个接一个地运行命令。

"scripts":{ "test":"npm run cypresscommand_1 ; npm run cypresscommand_2" }

【讨论】:

  • 非常感谢您的解释,我一直在谷歌搜索以找到发生了什么。如果您有要参考的链接,可以在评论中添加吗?
  • 您可以尝试一些带有上述运算符的 bash 命令,您会得到更清晰的信息,例如 ls & ls、ls && ls、ls | wc-l , ls ||光盘,光盘 || ls.
  • 我肯定会这样做。如果不是即使代码运行良好,我也不知道为什么它运行正常。再次感谢您。
  • “这些被解释为 bash 命令” 并不完全正确。这取决于用于运行 npm 脚本的 shell。默认情况下,NPM 通过 *nix 上的sh 和 Windows 上的cmd 运行 npm 脚本。 &&||(运算符)和|(管道)在两个 shell(shcmd)中都是相同的。但是,& 运算符在 cmdsh 中有所不同。 cmd 中的 & 类似于 sh 中的 ;。参见示例here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2018-01-04
  • 2023-03-06
  • 1970-01-01
  • 2020-05-29
  • 2021-08-11
相关资源
最近更新 更多