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

使用Spline时Gatsby Build构建失败问题求助

使用Spline时Gatsby Build构建失败问题求助

嘿,我来帮你解决这个头疼的问题!你遇到的情况是典型的服务端渲染(SSR)与浏览器依赖组件冲突问题——Spline的React组件需要调用浏览器环境里的专属API(比如window对象),但Gatsby执行build时是在Node.js环境下生成静态HTML,这个环境里并没有这些浏览器专属对象,所以才会触发报错。

下面给你两个亲测有效的解决办法:

方法一:动态导入Spline并禁用服务端渲染

借助@loadable/component工具,我们可以让Spline组件只在客户端环境加载,完全避开服务端渲染的阶段:

  1. 先安装依赖:
npm install @loadable/component
  1. 修改你的组件代码:
import loadable from '@loadable/component'

// 动态导入Spline,明确禁用服务端渲染
const Spline = loadable(() => import('@splinetool/react-spline'), {
  ssr: false,
  fallback: <div>加载3D场景中...</div> // 加载过程中的占位提示
})

const threeDtest = () => {
  return(
    <div>
      <Spline scene="https://prod.spline.design/2KMcF8q1JMXIHGGZ/scene.splinecode" />
    </div>
  )
}

export default threeDtest

方法二:判断客户端环境后再渲染Spline

通过React的状态和副作用钩子,我们可以先确认当前处于浏览器环境,再渲染Spline组件:

import Spline from '@splinetool/react-spline';
import { useEffect, useState } from 'react';

const threeDtest = () => {
  const [isBrowser, setIsBrowser] = useState(false);

  // 组件挂载后,确认处于浏览器环境
  useEffect(() => {
    setIsBrowser(true);
  }, []);

  return(
    <div>
      {/* 仅在浏览器环境下渲染Spline */}
      {isBrowser && <Spline scene="https://prod.spline.design/2KMcF8q1JMXIHGGZ/scene.splinecode" />}
    </div>
  )
}

export default threeDtest

两种方法都能解决问题,我个人更推荐第一种,因为@loadable/component是Gatsby官方推荐的处理这类场景的工具,使用起来更稳定规范。

备注:内容来源于stack exchange,提问作者Silke Janssens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:43:13