解决 Vite + React 项目部署 GitHub Pages 的完整指南:从 404 到成功部署

问题背景

在将 Vite + React 项目部署到 GitHub Pages 时,很多开发者会遇到一个常见问题:页面显示 404 错误,控制台报错找不到 main.jsx 文件。错误信息通常如下:

text

复制代码
GET https://username.github.io/repo/src/main.jsx 404 Not Found

这个问题困扰了很多开发者,本文将提供完整的解决方案

问题根源分析

错误原因

  1. 路径配置错误:GitHub Pages 使用项目名称作为路径前缀

  2. Jekyll 干扰:GitHub 默认使用 Jekyll 构建,会忽略某些文件

  3. 构建流程缺失:直接部署源代码而非构建后的静态文件

核心理解

GitHub Pages 只能托管静态文件,无法直接运行 React/JSX 源代码。必须通过构建工具(如 Vite)生成生产版本。

完整解决方案

第一步:项目配置修正

1. 修改 vite.config.js

javascript

复制代码
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
  base: '/your-repo-name/', // 重要:与仓库名称一致
  build: {
    outDir: 'dist',
    emptyOutDir: true
  }
})
2. 清理 index.html

html

复制代码
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>你的应用标题</title>
  </head>
  <body>
    <div id="root"></div>
    <!-- 删除手动引入的 script 标签 -->
  </body>
</html>

关键点:让 Vite 在构建时自动注入资源路径。

3. 配置 package.json

json

复制代码
{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview",
    "predeploy": "npm run build",
    "deploy": "gh-pages -d dist"
  },
  "homepage": "https://username.github.io/repo-name"
}

第二步:禁用 Jekyll

public 目录创建 .nojekyll 文件:

bash

复制代码
# 在项目根目录执行
touch public/.nojekyll

这个空文件告诉 GitHub Pages 不要使用 Jekyll 处理你的项目。

第三步:设置 GitHub Actions 自动化部署

创建 .github/workflows/deploy.yml

yaml

复制代码
name: Deploy Vite React App to GitHub Pages

on:
  push:
    branches: [ main ]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
          cache: 'npm'
      
      - name: Install dependencies
        run: npm install
      
      - name: Build project
        run: npm run build
      
      - name: Setup Pages
        uses: actions/configure-pages@v4
      
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./dist

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

第四步:本地测试验证

在部署前进行本地测试:

bash

复制代码
# 安装依赖
npm install

# 构建项目
npm run build

# 预览构建结果
npm run preview

访问 http://localhost:4173 确认应用正常工作。

第五步:部署和验证

1. 提交代码触发部署

bash

复制代码
git add .
git commit -m "feat: deploy to GitHub Pages"
git push origin main
2. 检查部署状态
  • 访问 GitHub 仓库 → Actions 查看部署进度

  • 部署成功后访问:https://username.github.io/repo-name

3. 验证部署成功

检查构建后的 dist/index.html 应该包含正确的资源路径:

html

复制代码
<script type="module" crossorigin src="/repo-name/assets/index-xxxxxx.js"></script>

常见问题排查

问题1:仍然报 404 错误

解决方案

  • 检查仓库名称是否与配置一致

  • 清除浏览器缓存(Ctrl+F5)

  • 访问时添加版本参数:?v=2

问题2:资源加载失败

解决方案

  • 确认 vite.config.js 中的 base 配置正确

  • 检查构建产物是否完整

问题3:GitHub Actions 构建失败

解决方案

  • 查看 Actions 日志定位错误

  • 确保 package.json 中的脚本正确

问题4:样式或图片不显示

解决方案

  • 使用相对路径引用资源

  • 检查 public 目录中的静态资源

最佳实践建议

1. 路径配置

  • 始终使用相对路径或 Vite 的路径别名

  • 避免硬编码绝对路径

2. 环境区分

javascript

复制代码
// vite.config.js
export default defineConfig({
  base: process.env.NODE_ENV === 'production' 
    ? '/repo-name/' 
    : '/',
})

3. 缓存策略

  • 为静态资源添加版本哈希

  • 使用合适的缓存头配置

4. 监控和回滚

  • 设置健康检查端点

  • 保留之前的部署版本以便快速回滚

总结

成功部署 Vite + React 项目到 GitHub Pages 的关键点:

  1. 正确的 base 路径配置

  2. 禁用 Jekyll 处理

  3. 使用 GitHub Actions 自动化构建

  4. 确保构建产物路径正确

  5. 彻底的本地测试

通过本文的步骤,你应该能够解决常见的 404 问题,并建立稳定的自动化部署流程。记住,部署前一定要在本地进行充分测试,这样可以节省大量的排查时间。


提示:如果遇到其他问题,欢迎在评论区留言,我会及时回复并提供解决方案。

相关推荐
Healer9182 小时前
纯css实现高度0-auto动画过度interpolate-size 和 height: calc-size(auto,size)
前端
葡萄城技术团队2 小时前
浏览器端音视频处理新选择:Mediabunny 让 Web 媒体开发飞起来
前端·音视频·媒体
FogLetter2 小时前
深入浅出 JavaScript 闭包:从背包理论到实战应用
前端·javascript
前端大卫3 小时前
表单与上传组件校验
前端·javascript·vue.js
伊织code3 小时前
Cap‘n Web - JavaScript原生RPC系统
前端·javascript·rpc
周尛先森3 小时前
匠心管控 package.json:让前端依赖告别臃肿与混乱
前端
90后的晨仔3 小时前
Vue3 事件处理详解:从入门到精通
前端·vue.js
西洼工作室3 小时前
设计模式与原则精要
前端·javascript·设计模式·vue
IT_陈寒3 小时前
SpringBoot 性能优化的 7 个冷门技巧,让你的应用快如闪电!
前端·人工智能·后端