npm 多个命令执行 && 不起作用,但是 & 和 || 做

Mud*_*era 1 bash node.js npm cypress

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

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

"scripts":{
"test":"npm run cypresscommand_1 && npm run cypresscommand_2"
}
Run Code Online (Sandbox Code Playgroud)

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

修改 1:插入 && 我使用了 &

"scripts":{
"test":"npm run cypresscommand_1 & npm run cypresscommand_2"
}
Run Code Online (Sandbox Code Playgroud)

修改 2:插入 && 我使用 ||

"scripts":{
"test":"npm run cypresscommand_1 || npm run cypresscommand_2"
}
Run Code Online (Sandbox Code Playgroud)

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

我想知道的是,

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

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

谢谢你。

Hru*_*ath 5

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

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

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

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

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

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

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

  • _“这些被解释为 bash 命令”_ 并不完全正确。它取决于用于运行 npm 脚本的 shell。默认情况下,NPM 在 _*nix_ 上通过 `sh` 运行 npm 脚本,在 Windows 上通过 `cmd` 运行 npm 脚本。“&&”、“||”(运算符)和“|”(管道)在两个 shell(“sh”和“cmd”)中都是相同的。但是,[`&`](http://www.embeddedframeworks.com/cmds/nt/syntax-redirection.html) 运算符在 `cmd` 和 `sh` 中有所不同。`cmd` 中的 `&` 类似于 `sh` 中的 `;`。请参阅示例[此处](/sf/ask/4364063791/#62348702)。 (3认同)