现象
FastGPT私有部署版本用户在更新最新代码后,本地运行项目先后出现两类报错。第一类报错为ReferenceError: window is not defined;修复该报错后,又出现TypeError: Cannot read properties of null (reading 'useMemo'),相关报错日志指向react、next-i18next及react-dom的服务端渲染模块。
可能原因
第一个报错的直接原因是echarts库在服务端渲染环境中引用了仅客户端可用的window对象。第二个报错的触发场景为服务端渲染时,next-i18next的appWithTranslation方法在无效上下文下调用了useMemo,从日志来看该问题出现在react-dom服务端渲染流程中。
排查步骤
- 拉取FastGPT私有部署版本的最新代码,执行本地启动命令,查看控制台输出的报错信息。
- 若出现
ReferenceError: window is not defined报错,打开components/Markdown/index.tsx文件,定位EChartsCodeBlock组件的动态导入代码。 - 完成第一个报错的修复后,再次启动项目,检查是否出现
TypeError: Cannot read properties of null (reading 'useMemo')报错。 - 若出现第二个报错,可参考提供的报错日志,定位到react、next-i18next及react-dom相关的服务端渲染环节进行排查。
解决与验证
针对第一个报错ReferenceError: window is not defined,可通过修改components/Markdown/index.tsx文件中的EChartsCodeBlock组件定义来修复,具体代码修改为:
const EChartsCodeBlock = dynamic(() => import('./img/EChartsCodeBlock'), {ssr:false});修改完成后,重新执行本地启动命令,验证该报错是否消失。 若修复第一个报错后出现TypeError: Cannot read properties of null (reading 'useMemo')报错,可结合提供的报错日志定位相关环节,需按实际环境确认具体修复方案。