Tôi đang xây dựng ứng dụng Electron (Node.js) cần phải sinh ra gcloud app deploy
từ ứng dụng có phản hồi thời gian thực (stdin/stdout/stderr) .Không thể sinh sản `triển khai ứng dụng gcloud` từ tập lệnh Node.js trên Windows
Tôi nhanh chóng chuyển từ child_process
để execa vì tôi đã có một số vấn đề trên Mac OS X với bộ đệm child_process được giới hạn đến 200KB (và gcloud app deploy
gửi một số đoạn lớn của string> 200KB mà tai nạn lệnh).
Bây giờ, với execa
mọi thứ có vẻ hoạt động bình thường trên OSX nhưng không hoạt động trên Windows.
Mã này trông giống như sau:
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 => {
...
})
})
Mã này hoạt động hoàn hảo trên Mac OS X trong khi tôi không có kết quả tương tự trên Windows
Tôi đã cố gắng rất nhiều điều:
- execa()
- execa.shell()
- tùy chọn shell: true
- Tôi đã thử maxBuffer thành 1GB (chỉ trong trường hợp)
- Nó hoạt động với tách rời: true NHƯNG Tôi không thể đọc stdout/stderr trong thời gian thực trong ứng dụng vì nó nhắc cmd.exe mới mà không tương tác với Nút. ứng dụng js
- Rất nhiều biến thể child_process.
Tôi đã thực hiện một GIST để hiển thị các câu trả lời tôi nhận được cho một số xét nghiệm tôi đã thực hiện trên Windows với script Process Child cơ bản: https://gist.github.com/thyb/9b53b65c25cd964bbe962d8a9754e31f
Tôi cũng mở một vấn đề trên execa
kho: https://github.com/sindresorhus/execa/issues/97
Có ai đó đã gặp sự cố này không? Tôi đã tìm kiếm xung quanh và thấy không có gì hứa hẹn ngoại trừ điều này reddit thread mà không giải quyết vấn đề này.