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

Next.js执行yarn build因react-plotly.js报self is not defined错误

问题原因

这个错误是Next.js服务端渲染(SSR/SSG)特性和react-plotly.js的浏览器环境依赖冲突导致的:

  • react-plotly.js底层依赖的plotly.js库是纯前端库,内部直接调用了浏览器环境才存在的全局对象self,Node.js服务端运行环境没有这个全局对象
  • Next.js执行yarn build时会在服务端预执行页面组件代码生成静态内容,此时加载react-plotly.js就会触发ReferenceError: self is not defined报错
  • yarn dev模式下组件大多在客户端侧加载执行,不会触发服务端执行逻辑,因此运行正常
解决方案

核心思路是让react-plotly.js只在客户端侧加载,服务端构建阶段不引入该组件:

  1. 如果你使用的是Next.js Pages Router,用next/dynamic动态导入组件并关闭SSR:
    将原来的直接导入逻辑替换为动态导入:
import dynamic from 'next/dynamic';

// 禁用SSR,该组件只会在客户端加载
const Plot = dynamic(() => import('react-plotly.js'), { ssr: false });

原有Plot组件的调用代码无需修改。

  1. 如果你使用的是Next.js 13+ App Router,除了上述动态导入逻辑外,还需要在使用Plot组件的页面/组件文件顶部添加客户端组件标记:
'use client';
import dynamic from 'next/dynamic';

const Plot = dynamic(() => import('react-plotly.js'), { ssr: false });

// 其余组件逻辑不变

修改完成后重新执行yarn build即可正常构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:06:06