1

Windows 上的 spawn pm2 进程只能启动 .bat 或 .exe。需要启用 {shell: true} 才能真正工作。

在 Windows 上调试 spawn 时,“spawn pm2 ENOENT”的荒谬错误变得明显。在四处挖掘并发现在神 StackOverflow 上绝对没有真正的解决方案后,我在一堆 GitHub 问题上进行了挖掘,最终为 Windows 生成找到了一个合适的解决方案。

找到真正的解决方案https://github.com/nodejs/node-v0.x-archive/issues/2318

@DrPizza 解决方案

@OrangeDog好吧,无论如何您都不能真正编写可移植的批处理文件。

@DrPizza 今天建议我们可以添加一个 { shell: true } 选项来生成。我有点喜欢这个主意。它允许将 spawn 用于与 exec 相同的目的,而无需缓冲所有输出。我们目前也有 exec 和 execFile 之间的奇怪区别;我们可以使这些功能相同,但 shell 选项的默认值不同。@ry,@bnoordhuis,你们怎么看?

对我来说,最终的解决方案如下

让 env = env === '生产' ?“产品”:“沙子”;// 环境变量的上下文

let deploy = spawn('pm2', ['deploy', env, 'update', '&&', 'pm2', 'deploy', env, 'exec', '"sudo pm2 reload "'], {shell:真的});

4

0 回答 0