我正在尝试使用批处理文件在本地快速启动我的 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
双管道||
符号仅当前一个命令失败时才运行下一个命令。