Node.js通过child_process调用ripgrep无响应无报错如何解决?
问题原因
你调用rg时缺少搜索路径参数。手动执行的rg test .中末尾的.指定了在当前目录执行搜索,但代码里cp.spawn('rg', ['test'], { cwd: './'})仅传递了搜索关键词test,未传递搜索路径。这种场景下ripgrep默认会进入标准输入读取模式,等待进程的标准输入流传入要搜索的内容,因此进程会一直处于挂起状态,不会触发输出或关闭事件。
解决方案
给ripgrep补充搜索路径参数即可,修改后的代码如下:
// index.js const cp = require('child_process'); // 补充了搜索路径 '.',和手动执行的命令参数对齐 let p = cp.spawn('rg', ['test', '.'], { cwd: './'}); p.stdout.on('data', data => { console.log('stdout: ' + data.toString()); }); p.stderr.on('data', data => { console.log('stderr: ' + data.toString()); }); p.on('close', code => { console.log('closed: ' + code); });
额外优化建议
- 如果后续需要解析搜索结果,可以添加
--color never参数,避免输出携带终端颜色控制符,降低解析成本,参数写法为['test', '.', '--color', 'never']。 - 如果你是开发VS Code扩展,更推荐使用官方维护的
@vscode/ripgrep包,它内置了对应系统的ripgrep二进制文件,不需要依赖用户本地安装rg命令,跨系统兼容性更好。
内容的提问来源于stack exchange,提问作者Kiran Machhewar
相关产品推荐
相关产品推荐

