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

部署React应用到GitHub Pages后public文件夹图片加载失败求助

React部署GitHub Pages后public文件夹图片加载失败解决方案

问题核心

部署到GitHub Pages后,public文件夹内的图片通过react-three-fiber的useLoader钩子加载失败,控制台报错:

Uncaught Error: Could not load /{myrepo}{folderName}/{the-image}.jpeg: undefined)
 at index-6f0019d1.esm.js:1670:1

尝试过直接写路径、用process.env.PUBLIC_URL拼接均无效,下面解释关键原因和解决方法。

原因拆解

GitHub Pages部署的React应用是放在子路径下的(比如https://xxx.github.io/your-repo/),而非根域名。Three.js的TextureLoader路径解析逻辑和React静态资源不同:React的PUBLIC_URL会自动带上仓库名,但TextureLoader默认从页面根路径(/)请求资源,若拼接路径时少了斜杠,就会出现repo-namefolderName这种错误路径,导致资源找不到。

解决步骤

1. 配置package.json的homepage

先在项目根目录的package.json里添加homepage字段,两种写法都可以:

  • 明确指定仓库地址:
"homepage": "https://<你的GitHub用户名>.github.io/<你的仓库名>/"
  • 通用相对路径写法(推荐,适配本地和部署环境):
"homepage": "./"

这个配置会让React正确设置process.env.PUBLIC_URL的值,避免路径解析混乱。

2. 正确拼接加载路径

两种有效写法,选一种即可:

写法一:用相对路径(最简单)

直接以./开头写相对路径,对应public文件夹下的结构:

const [theImage, secondImage] = useLoader(TextureLoader, [
  "./folderName/the-image.jpeg",
  "./folderName/second-image.jpeg"
])

写法二:用process.env.PUBLIC_URL正确拼接

注意在PUBLIC_URL和文件夹名之间加斜杠,避免路径连在一起:

const basePath = `${process.env.PUBLIC_URL}/`;
const [theImage, secondImage] = useLoader(TextureLoader, [
  `${basePath}folderName/the-image.jpeg`,
  `${basePath}folderName/second-image.jpeg`
])

本地开发时process.env.PUBLIC_URL是空字符串,拼接后就是./folderName/...;部署后会自动带上仓库名,变成/repo-name/folderName/...,符合GitHub Pages的路径要求。

3. 确认部署命令正确

用gh-pages包部署时,确保打包和部署命令正确:
在package.json的scripts里配置:

"scripts": {
  "build": "react-scripts build",
  "deploy": "gh-pages -d build"
}

然后运行npm run build && npm run deploy完成部署。

为什么之前的尝试失败?

你之前用process.env.PUBLIC_URL + "{folderName}/{the-image}.jpeg"时,没有在PUBLIC_URL和文件夹名之间加斜杠,导致拼接后的路径变成/repo-namefolderName/the-image.jpeg(正确路径应该是/repo-name/folderName/the-image.jpeg),加载器自然找不到资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:10:42