这里只针对静态页面啊,需要向后端服务器访问数据的不行,所以还是有点受限了。
在部署时遇到了许多问题,所以想和大家分享一下我的解决方案。
我自己也去找了许多教程,下面贴出一些个人觉得有帮助的:
来认真学一下,项目部署到 github pages-腾讯云开发者社区-腾讯云
在 GitHub Pages 上部署 React 应用|极客教程
【轻松上手:React Vite 应用快速部署至 Github Pages】www.bilibili.com/video/BV1ch…
【免费部署一个静态网站!在GitHub上部署静态网站教程】www.bilibili.com/video/BV1D2…
虽然啊,这些都没有解决我的问题,但是讲的还是不错的。其中有些是使用git命令推到Github的仓库上,但是不知道为什么输命令的话连不上github
报错如下:
fatal: unable to access 'https://github.com/仓库名/项目名.git/': Failed to connect to github.com port 443 after 21143 ms: Couldn't connect to server
遇到过404的问题即访问不到资源,也遇到过不报错但全白屏的情况。其实都是路径不对的原因,接下来进行分析。
GitHub Pages 的两种部署方式
-
用户/组织站点
- 仓库名:
username.github.io - 访问地址:
https://username.github.io/ - 部署在根路径,base 配置为
/
- 仓库名:
-
项目站点
- 仓库名:任意名称(如
myWeb) - 访问地址:
https://username.github.io/myWeb/ - 部署在子路径,需要特殊配置
- 仓库名:任意名称(如
关键配置项
- base:Vite 配置,控制静态资源(JS/CSS/图片)的引用路径
- basename:React Router 配置,控制路由的基础路径
失败原因分析
问题 1:文件结构错误
现象: 404 错误,资源找不到
原因: 上传时把 dist 文件夹本身拖到 GitHub,导致结构变成:
仓库根目录/
└── dist/
├── index.html
└── assets/
实际访问路径变成 https://xxx.github.io/myWeb/index.html,而 HTML 里的资源路径是 /myWeb/assets/...,路径不匹配。
解决方案:
- 进入 dist 文件夹内部
- 全选里面的文件和文件夹(不选 dist 本身)
- 拖到 GitHub 仓库根目录
正确结构:
仓库根目录/
├── index.html
├── assets/
└── vite.svg
问题 2:base 配置错误
现象: 资源 404,或者图标能显示但 JS/CSS 加载失败
原因: base 配置不正确导致资源路径错误
尝试过的配置:
-
base: '/' (默认)
<script src="/assets/index.js"></script>实际访问:
https://xxx.github.io/assets/index.js❌正确路径:
https://xxx.github.io/myWeb/assets/index.js -
base: '/visual-editor/' (绝对路径)
<script src="/myWeb/assets/index.js"></script>生产环境:✅ 正确
本地开发:❌
npm run dev和npm run preview都会失败 -
base: './' (相对路径)
<script src="./assets/index.js"></script>看似完美,但遇到了问题 3...
问题 3:React Router 路由匹配失败
现象:
- 资源加载成功(304 /200 状态码)
- 控制台无报错
- 页面白屏
- DOM 中只有
<div id="root"><div id="app"></div></div>,app 内部为空
原因: BrowserRouter 在子路径下路由匹配失败
技术细节:
- GitHub Pages 访问地址:
https://xxx.github.io/myWeb/ - BrowserRouter 默认 basename 是
/ - 当前实际路径是
/myWeb/ - 路由配置的
path="/"匹配不上实际路径/myWeb/ - React 渲染了
<div id="app">但 Routes 内没有匹配的组件
为什么本地 preview 也白屏?
npm run preview运行在http://localhost:4173/- 如果 base 是
/myWeb/,资源路径变成http://localhost:4173/myWeb/assets/... - 但实际文件在
http://localhost:4173/assets/... - 路径不匹配导致加载失败或路由失败
问题 4:开发/生产环境冲突
矛盾点:
- 开发环境(
npm run dev)需要 base 为/ - 生产环境(GitHub Pages)需要 base 为
/myWeb/ - 写死任何一个值都会导致另一个环境失败
最终解决方案
1. 动态配置 base(vite.config.ts)
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig(({ mode }) => ({
plugins: [react()],
resolve: {
alias: {
'@': '/src',
},
},
server: {
port: 3000,
},
base: mode === 'production' ? '/myWeb/' : '/',
}));
原理:
mode参数由 Vite 自动传入npm run dev:mode = 'development',base = '/'npm run build:mode = 'production',base = '/visual-editor/'
2. 动态配置 basename(src/main.tsx)
import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom';
import App from './App';
import './styles/base.css';
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<BrowserRouter basename={import.meta.env.BASE_URL}>
<App />
</BrowserRouter>
</React.StrictMode>
);
原理:
import.meta.env.BASE_URL是 Vite 内置环境变量- 自动读取 vite.config.ts 中的 base 值
- 开发环境:basename = '/'
- 生产环境:basename = '/myWeb/'
3. 部署流程
1. 构建项目
npm run build
2. 上传文件
打开本地 dist 文件夹
全选里面的所有内容(index.html、assets 文件夹等)
拖到 GitHub 仓库根目录上传
3. 配置 GitHub Pages
仓库 Settings → Pages
Source: Deploy from a branch
Branch: main
Folder: / (root)
Save
4. 等待 1-2 分钟后访问
https://username.github.io/myWeb/
常见问题排查
白屏无报错
- 检查 DOM 结构,看
<div id="root">里有没有内容 - 如果只有空的
<div id="app">,是路由问题 - 确认 BrowserRouter 的 basename 配置
资源 404
- F12 → Network 面板查看失败的资源路径
- 对比实际文件在 GitHub 上的位置
- 检查 vite.config.ts 的 base 配置
缓存问题
- 强制刷新:
Ctrl + Shift + R(Windows) - 无痕模式访问
- 清除浏览器缓存
- URL 加随机参数:
?v=123(没试过有没有用)
本地预览失败
npm run preview
如果白屏,说明配置有问题,不要急着部署,先在本地解决。
总结
部署 Vite + React Router 到 GitHub Pages 的核心是:
- 理解路径差异:开发环境根路径 vs 生产环境子路径
- 两处配置:静态资源路径(base)+ 路由基础路径(basename)
- 环境区分:使用 Vite 的 mode 参数动态配置
- 正确上传:上传 dist 内容,不是 dist 文件夹
配置正确后,开发和部署都能正常工作,无需手动切换配置。
如果网络上实在找不到解决方法,可以去问ai的,现在大模型越来越强,将问题和目标清楚地描述给ai,大概率可以解决问题。