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

Next.js引入依赖jQuery的SignalR脚本时SSR报错该如何解决?

解决方案
  • 第一步:调整data-pulse-provider.js的依赖加载顺序,同时增加浏览器环境判断,规避SSR阶段无window的问题:
// 修改后的data-pulse-provider.js代码
import { logMessage, } from './helpers';
import $ from 'jquery';

// 仅在浏览器环境执行signalr相关初始化逻辑
if (typeof window !== 'undefined') {
  // 必须先把jQuery挂载到window,再加载signalr,解决依赖识别问题
  window.jQuery = $;
  require('signalr');
}

const DataPulseProvider = function(){};

export {DataPulseProvider}

原来的代码是先加载signalr再挂载jQuery,顺序颠倒导致signalr加载时找不到全局jQuery,这是直接触发报错的核心原因,调整顺序即可修复该问题。

  • 第二步:使用Next.js动态导入时明确关闭SSR配置
    你之前在组件层动态导入没有关闭SSR,导致依赖还是会在服务端预加载触发环境报错,正确的导入写法如下:
import dynamic from 'next/dynamic';

// 引入你的container组件时关闭SSR,确保整个组件链路仅在客户端加载
const ChartContainer = dynamic(() => import('./container'), {
  ssr: false
});

之后你直接在页面中使用<ChartContainer />即可,不需要在组件内部写await import的逻辑。

  • 可选兜底方案:全局注入jQuery
    如果上述修改后仍然有依赖识别问题,可以在页面层通过next/script全局注入jQuery,确保signalr可以直接拿到全局实例:
import Script from 'next/script';
import ChartContainer from './components/ChartContainer';

export default function Home() {
  return (
    <>
      {/* 先将jQuery文件放到项目public目录下,再引入 */}
      <Script 
        src="/jquery-3.6.4.min.js" 
        strategy="beforeInteractive"
      />
      <ChartContainer />
    </>
  )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:54:00