Electron运行npm run dev启动失败 wait-on未触发进程挂死问题
问题现象
执行npm install与npm run build后,首次2-3次运行npm run dev项目可正常启动,后续启动时concurrently可正常加载wait-on模块,react-scripts成功启动React本地服务后,wait-on始终不触发后续Electron启动流程,进程持续挂起、Electron窗口无法弹出。
出现问题时无任何自定义代码改动,删除build目录、node_modules目录重装依赖、重新克隆仓库均无法定位固定触发原因。
控制台输出如下:
PS D:\Home\Projects\finally> npm run dev npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. > finally@0.1.0 dev > concurrently -k -s command-electron "cross-env BROWSER=none npm start" "npm:electron" [electron] npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. [0] npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. [electron] [electron] > finally@0.1.0 electron [electron] > wait-on tcp:3000 && electron . [electron] [0] [0] > finally@0.1.0 start [0] > react-scripts start [0] [0] (node:4504) [DEP_WEBPACK_DEV_SERVER_ON_AFTER_SETUP_MIDDLEWARE] DeprecationWarning: 'onAfterSetupMiddleware' option is deprecated. Please use the 'setupMiddlewares' option. [0] (Use `node --trace-deprecation ...` to show where the warning was created) [0] (node:4504) [DEP_WEBPACK_DEV_SERVER_ON_BEFORE_SETUP_MIDDLEWARE] DeprecationWarning: 'onBeforeSetupMiddleware' option is deprecated. Please use the 'setupMiddlewares' option. [0] Starting the development server... [0] [0] Compiled successfully! [0] [0] You can now view finally in the browser. [0] [0] Local: http://localhost:3000 [0] On Your Network: http://172.28.224.1:3000 [0] [0] Note that the development build is not optimized. [0] To create a production build, use npm run build. [0] [0] webpack compiled successfully [0] No issues found.
根因与修复方案
该问题为Windows环境下React+Electron开发栈的常见兼容问题,按优先级依次排查修复即可:
- 修复IPv6解析冲突(90%以上场景为该原因)
Windows默认将localhost优先解析为IPv6地址::1,而react-scripts 5.x版本默认仅监听IPv4地址127.0.0.1:3000,wait-on探测tcp:3000时默认走IPv6探测,会一直判定端口未开放;前几次启动偶发成功是系统本地DNS缓存临时生效导致,缓存失效后问题复现。
直接修改package.json中electron脚本的wait-on探测地址,强制指定IPv4地址:"electron": "wait-on tcp:127.0.0.1:3000 && electron ." - 降级wait-on版本
wait-on 7.x及以上版本在Windows平台存在TCP探测偶发挂起的已知bug,若修改IPv4地址后仍有问题,将wait-on降级到稳定版6.0.1:npm install wait-on@6.0.1 -D - 增加探测配置避免无限挂起
给wait-on增加轮询间隔、超时时间参数,避免异常场景下进程永久挂起,脚本可修改为:
参数说明:"electron": "wait-on -t 30000 -i 1000 tcp:127.0.0.1:3000 && electron ."-t 30000设置30秒探测超时,-i 1000设置1秒一次的轮询探测间隔。 - 排查系统网络干扰
检查本机是否开启VPN、全局代理、第三方防火墙类软件,这类软件会劫持本地端口的TCP探测请求,导致wait-on误判端口未开放,临时关闭这类软件后重试即可。
内容的提问来源于stack exchange,提问作者donchoTable
相关产品推荐
相关产品推荐

