Windows 批处理文件中的多个“开始”行相互干扰

Windows 批处理文件中的多个“开始”行相互干扰

我正在尝试使用批处理文件在本地快速启动我的 Web 应用程序,因为有很多命令需要运行。我正在使用以下命令:

start "" /d "%~dp0client" npx webpack --watch
start "" /d "%~dp0client" npx live-server --entry-file=index.html
start "" /d "%~dp0server" npx nodemon index.js

它正确地打开了 3 个窗口。前 2 个窗口运行正常。但在窗口中npx nodemon index.js,它出错并显示“'webpack' 未被识别为...”。即使 webpack 命令在其窗口中正确执行。因此,似乎 webpack 命令中的一些残留内容以某种方式干扰了 nodemon 命令。

它没有显示每个命令实际运行了什么命令,所以我很难弄清楚。为什么它们会互相干扰?我的语法错了吗?

答案1

实际上,您正在并行运行所有这些进程。

如果webpack进程需要时间来初始化自身,则任何需要它的进程在webpack未准备好的情况下启动都会失败。

为了避免这个问题,请在nodemon命令前添加一些超时。

例如,这将等待 5 秒,同时丢弃超时命令的输出:

start "" /d "%~dp0client" npx webpack --watch
start "" /d "%~dp0client" npx live-server --entry-file=index.html
timeout 5 > nul
start "" /d "%~dp0server" npx nodemon index.js

参考 :超时命令

答案2

Command A & Command B

执行命令 A,然后执行命令 B(不执行任何操作)

Command A | Command B

执行命令 A,并将其所有输出重定向到命令 B 的输入

Command A && Command B

执行命令 A,运行后评估错误级别,如果退出代码(错误级别)为 0,才执行命令 B

Command A || Command B

执行命令 A,评估此命令的退出代码,如果它不是 0,则只执行命令 B

双管道||符号仅当前一个命令失败时才运行下一个命令。

相关内容