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