我正在构建一个Electron应用程序 (Node.js),它需要gcloud app deploy
从具有实时反馈 (stdin/stdout/stderr) 的应用程序中生成。
我迅速从execachild_process
切换,因为我在 Mac OS X 上遇到了一些问题,其中 child_process 缓冲区限制为 200kb(并发送了一些大于 200kb 的大块字符串,导致命令崩溃)。gcloud app deploy
现在,execa
一切似乎在 OSX 上都能正常工作,但在 Windows 上却不行。
代码看起来像这样:
let bin = `gcloud${/^win/.test(process.platform) ? '.cmd' : ''}`
//which: https://github.com/npm/node-which
which(bin, (err, fullpath) => {
let proc = execa(fullpath, ['app', 'deploy'], {
cwd: appPath
})
proc.stdout.on('data', data => {
parseDeploy(data.toString())
})
proc.stderr.on('data', data => {
parseDeploy(data.toString())
})
proc.then(() => {
...
}).catch(e => {
...
})
})
此代码在 Mac OS X 上完美运行,而我在 Windows 上没有相同的结果
我尝试了很多东西:
- 执行()
- execa.shell()
- 选项外壳:真
- 我尝试将 maxBuffer 设置为 1GB(以防万一)
- 它适用于 detached:true 但我无法在应用程序中实时读取 stdout / stderr,因为它会提示一个新的 cmd.exe 而无需与 Node.js 应用程序交互
- 很多 child_process 变体。
我做了一个 GIST 来显示我在 Windows 上使用基本子进程脚本完成的一些测试得到的响应: https ://gist.github.com/thyb/9b53b65c25cd964bbe962d8a9754e31f
execa
我还在存储库上打开了一个问题: https ://github.com/sindresorhus/execa/issues/97
有人已经遇到这个问题了吗?我四处搜索,发现除了这个不能解决这个问题的reddit 线程之外没有任何希望。