转换为spawn?"/>
如何将exec转换为spawn?
我正在将exec
与以下代码一起使用NPM执行脚本,并且运行良好。
const { exec, spawn } = require('promisify-child-process')
await exec(`npm run start ${key} ${scriptVariables[key]}`)
然后我开始出现此错误:
RangeError [ERR_CHILD_PROCESS_STDIO_MAXBUFFER]:超出标准缓冲区最大缓冲区长度
所以我认为缓冲区是一个问题,并将其更改为:
await exec(`npm run start ${key}-Product ${UrlsArray[i]}`, {maxBuffer: 4096 * 4096})
更好,但偶尔仍会出现一些错误。因此,从我阅读的内容来看,我需要更改为spawn
,并且不要缓冲。
但是这个不起作用:
await spawn(`npm run start ${key}-Product ${UrlsArray[i]}`)
任何想法如何转换为代码?
回答如下:对于spawn
,您需要以数组形式提供参数:
await spawn(
'npm',
['run', 'start', `${key}-Product`, UrlsArray[i]],
{maxBuffer: 4096 * 4096}
);
但是,如果与maxBuffer长度有关,这将无法解决您的错误,您仍然需要增加限制。如果您的用例允许的话,您也可以使用流媒体代替阅读整个输出都在前面。您也可以尝试从中删除一些输出npm脚本。
这是来自Node.js文档的使用流式传输的示例:
const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
更多推荐
如何将exec转换为spawn?
发布评论