将 Vite 项目部署到 Github Pages

编程

把 Vite 项目部署到 Github Pages 其实很简单,具体步骤如下

首先在你要部署的项目下,安装 gh-pages 包:

1
npm install gh-pages --save-dev

接着打开 vite.config.js 文件,设置你的 Base URL:在 base 配置项里填写 /你的 Github 仓库名/,举个例子,如果我的仓库名叫 vite-react-project,那这里就填 /vite-react-project/

1
2
3
4
5
6
7
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
// https://vitejs.dev/config/
export default defineConfig({
base: "/vite-react-project/",
plugins: [react()],
});

然后在 package.json 文件里,补充上 deploy 命令(具体命令需根据项目实际情况配置,常见配置可参考官方示例,核心是通过 gh-pages 包推送构建产物)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"name": "vite-project",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",

"predeploy": "npm run build",
"deploy": "gh-pages -d dist"

},
"dependencies": {
...
},
"devDependencies": {
...
}
}

最后执行以下命令,触发部署:

1
npm run deploy

部署命令执行完成后,进入你的 Github 仓库(Repo),点击顶部的 Settings 选项,再在右侧菜单中找到 Pages 选项。

这样就能看到你的项目已经部署成功了。如果没看到对应的网址,不用着急,稍等一会儿就行 ——deploy 操作完成后,网址不会立刻显示出来。

额外步骤

vite.config.ts 使用自定义域名时,资源基础路径应为根路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
export default defineConfig(() => ({
plugins: [react()],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
// 使用自定义域名时,资源基础路径应为根路径
base: '/',
server: {
host: '127.0.0.1',
port: 5173
},
...

404.html 将非哈希路由的直链(/xxx)重定向为哈希路由(/#/xxx),用于 GitHub Pages 刷新兼容

1
2
3
4
5
6
7
8
9
10
11
12
13
...  
<meta http-equiv="refresh" content="0; url=/" />
<script>
(function () {
// 将非哈希路由的直链(/xxx)重定向为哈希路由(/#/xxx),用于 GitHub Pages 刷新兼容
var base = '/';
var path = window.location.pathname;
var rest = path.slice(base.length); // 去掉开头的 '/'
var search = window.location.search || '';
var hash = window.location.hash || '';
var target = base + '#/' + rest.replace(/^\//, '') + search + hash;
window.location.replace(target);
...

src/App.tsx 使用 HashRouter,避免 GitHub Pages 对子路径返回 404

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { Provider } from 'jotai';
import React, { Suspense } from 'react';
import { Route, HashRouter as Router, Routes } from 'react-router-dom';
import { GlobalErrorProvider } from './components/ui/GlobalErrorProvider';
import { MainPage } from './pages/MainPage';

@@ -13,6 +13,7 @@ function App() {
return (
<Provider>
<GlobalErrorProvider>
{/* 使用 HashRouter,避免 GitHub Pages 对子路径返回 404 */}
<Router>
<Routes>
<Route path="/" element={<MainPage />} />

src/containers/MainPageContainer.tsx 使用完整路径,解决无法访问问题

1
2
3
4
5
6
7
const [showResumeSettings, setShowResumeSettings] = useState(false);

const handlePreview = () => {
window.open('./preview', '_blank'); // 使用完整路径
};

const handleClear = () => {

本文作者:WindsorWu

本文链接: https://blog.nekolin.top/2025/09/27/Vite-Github-Pages/

文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。

评论

您所在的地区可能无法访问 Disqus 评论系统,请切换网络环境再尝试。