You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron.NET环境下ASP.NET Core+React集成SignalR遇eventsource缺失问题

解决Electron.NET + ASP.NET Core + React中SignalR的"Cannot find module 'eventsource'"错误

问题原因

当Electron的nodeIntegration设为true时,渲染进程会优先使用Node.js的模块解析逻辑。SignalR客户端在浏览器环境下会调用原生EventSource API,但开启Node集成的Electron环境中,它会尝试加载Node.js生态的eventsource模块——而这个模块默认未安装,因此抛出找不到模块的错误。

解决方案

1. 安装eventsource模块

直接在项目中安装Node版的eventsource依赖,让Electron能找到对应的模块:

npm install eventsource --save

或使用yarn:

yarn add eventsource

2. 确认SignalR连接配置(可选但建议)

虽然你已经添加了WebSocket相关配置,可以再确认配置的准确性,确保连接强制使用WebSocket传输,减少触发EventSource相关逻辑的可能:

connection = new signalR.HubConnectionBuilder()
  .withUrl('http://127.0.0.1:5293/progressHub', {
    withCredentials: true,
    skipNegotiation: true,
    transport: signalR.HttpTransportType.WebSockets,
  })
  .build()

该配置会跳过协商步骤直接使用WebSocket,但安装eventsource模块是更彻底的解决方式——因为SignalR内部可能在某些降级场景下仍会尝试调用EventSource。

3. 备选方案:强制使用浏览器原生EventSource

如果不想安装额外模块,可以在React应用入口文件(如index.tsx)中添加如下代码,强制SignalR使用浏览器环境的原生EventSource:

declare global {
  interface Window {
    EventSource: any;
  }
}

// 绑定浏览器原生EventSource到全局,避免Node模块解析逻辑
window.EventSource = window.EventSource || (window as any).EventSource;

这种方法绕开Node.js的模块解析流程,直接使用Electron渲染进程内置的浏览器API,但兼容性稳定性不如安装模块的方案。

验证

完成上述操作后,重新启动Electron应用,SignalR连接即可正常建立,不会再出现找不到eventsource的错误。

内容的提问来源于stack exchange,提问作者CraZyDroiD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:05:10