我正在构建一个Electron应用程序(Node.js),它需要从具有实时反馈(stdin/stdout/stderr)的应用程序中产生gcloud app deploy
。无法在Windows上从Node.js脚本产生`gcloud app deploy`
我迅速从child_process
切换到execa,因为我曾与child_process缓冲区,被限制在200KB(和gcloud app deploy
发送字符串的一些大块> 200KB其崩溃的命令)在Mac OS X中的一些问题。
现在,与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()
- execa.shell()
- 选项壳:真
- 我试图maxBuffer到1GB(以防万一)
- 它与分离:真正的,可是我不能够实时的应用程序,它会提示一个新的CMD.EXE,而不与节点的交互读取标准输出/标准错误。 js应用程序
- 很多child_process变体。
我已经做了GIST显示我得到了一些测试,我已经在Windows上进行基本的子进程的脚本响应: https://gist.github.com/thyb/9b53b65c25cd964bbe962d8a9754e31f
我也开了一个问题上execa
库:https://github.com/sindresorhus/execa/issues/97
有人已经有这个问题吗?我搜索了四周,发现没有什么前途,除了这个reddit thread这不能解决这个问题。