执行node-jq时抛出event.js错误的问题排查求助
问题根因分析
这个报错的核心是ENOENT错误,代表系统找不到指定路径的可执行文件,也就是C:\reporting-app\node_modules\node-jq\bin\jq这个文件不存在,和你的业务代码逻辑无关。
为什么之前稳定运行6个月,这次部署后出问题
node-jq在安装时会自动根据当前运行的操作系统下载对应版本的jq二进制文件:
- Linux/macOS下生成的二进制文件名为
jq - Windows下生成的二进制文件名为
jq.exe
出现报错大概率是本次部署流程出现了以下变动:
- 部署环境的操作系统发生了变更,或者复用了其他操作系统环境下生成的node_modules缓存
- 依赖安装步骤新增了
--ignore-scripts参数,跳过了node-jq自动下载二进制的执行脚本 - 部署服务器新增了网络限制,导致node-jq安装时无法正常下载对应版本的jq二进制
排查&解决步骤
- 首先进入
C:\reporting-app\node_modules\node-jq\bin\目录,确认目录下存在的文件:- 如果存在
jq.exe,说明是node-jq版本的路径识别bug,没有自动匹配Windows下的exe后缀 - 如果目录为空,说明安装时没有成功下载二进制文件
- 如果存在
- 通用修复方案:
删除当前项目的node_modules目录和锁文件(package-lock.json/yarn.lock),在当前部署的Windows环境下执行不带额外参数的npm install,让node-jq自动下载适配Windows的二进制文件 - 快速修复方案:
你可以直接在调用jq.run时手动指定jq的二进制路径,避免识别错误:
如果是内网环境无法自动下载,也可以手动下载Windows版的jq二进制,放到任意目录后通过execute(source) { return jq.run(this.query, source, { input: 'string', slurp: true, jqPath: 'C:\\reporting-app\\node_modules\\node-jq\\bin\\jq.exe' }); }jqPath参数指定路径即可。 - 版本兼容修复:
你当前使用的node-jq@1.12.0存在已知的Windows路径适配问题,也可以直接升级node-jq到最新稳定版解决该问题。
内容的提问来源于stack exchange,提问作者user3117281
相关产品推荐
相关产品推荐

