Vue3+Vite項(xiàng)目部署后刷新白屏問(wèn)題的解決方法
問(wèn)題現(xiàn)象
使用 Vue3 + Vite + vue-router 的項(xiàng)目在本地開(kāi)發(fā)正常,但打包部署到服務(wù)器后:
- 直接訪問(wèn)首頁(yè)正常
- 通過(guò)路由跳轉(zhuǎn)頁(yè)面正常
- 手動(dòng)刷新頁(yè)面時(shí)出現(xiàn)白屏
- 控制臺(tái)可能顯示 404 錯(cuò)誤或資源加載失敗
核心原因分析
1. 路由模式與服務(wù)器配置沖突
Vue-router 使用 createWebHistory(),實(shí)際使用的是瀏覽器原生 History API。
這種模式需要服務(wù)器配合處理非根路徑的請(qǐng)求,否則刷新時(shí)服務(wù)器會(huì)嘗試查找不存在的物理文件。
2. Vite 基礎(chǔ)路徑配置
// vite.config.js
export default defineConfig({
base: '/this/is/a/path/', // 該路徑必須與部署目錄完全一致
})
3. Vue Router 配置
const router = createRouter({
history: createWebHistory('/this/is/a/path/'), // 與 Vite base 配置一致
routes
})
解決方案
1. 驗(yàn)證配置一致性
| 配置項(xiàng) | 正確示例 | 驗(yàn)證方法 |
|---|---|---|
| Vite base | /this/is/a/path/ | 檢查打包后的 index.html 資源路徑 |
| Router history | createWebHistory('/this/is/a/path/') | 檢查路由初始化代碼 |
| 實(shí)際部署路徑 | http://domain.com/this/is/a/path/ | 檢查服務(wù)器部署目錄 |
注意:所有路徑配置必須保持完全一致,特別注意結(jié)尾的 /
2. 服務(wù)器配置示例
Nginx 配置
location /this/is/a/path/ {
# 指向打包后的目錄
alias /your/project/dist/;
try_files $uri $uri/ /this/is/a/path/index.html;
# 開(kāi)啟 gzip
gzip on;
gzip_types text/plain application/xml application/javascript text/css;
}
Apache 配置(.htaccess)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /this/is/a/path/
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /this/is/a/path/index.html [L]
</IfModule>
3. 驗(yàn)證資源加載路徑
打開(kāi)瀏覽器開(kāi)發(fā)者工具,檢查以下資源是否正常加載:
- JS/CSS 文件路徑
- 圖標(biāo)等靜態(tài)資源
- 異步加載的 chunk 文件
正確路徑示例:
https://your-domain.com/this/is/a/path/assets/index.123abc.js
4. 處理靜態(tài)資源 404
如果出現(xiàn)靜態(tài)資源 404,可嘗試以下方案:
// vite.config.js
export default defineConfig({
build: {
assetsDir: 'static', // 將資源分類到 static 目錄
rollupOptions: {
output: {
assetFileNames: 'static/[name]-[hash][extname]'
}
}
}
})
常見(jiàn)錯(cuò)誤排查表
| 錯(cuò)誤現(xiàn)象 | 可能原因 | 解決方案 |
|---|---|---|
| 所有頁(yè)面顯示 404 | 服務(wù)器未指向正確目錄 | 檢查服務(wù)器配置的 root/alias |
| 僅刷新時(shí)白屏 | 缺少 try_files/rewrite 規(guī)則 | 添加 history fallback 配置 |
| 部分資源 404 | base 路徑不一致 | 統(tǒng)一所有路徑配置 |
| 控制臺(tái)顯示路由錯(cuò)誤 | 路由配置路徑?jīng)_突 | 檢查路由的 path 定義 |
| 開(kāi)發(fā)環(huán)境正常,生產(chǎn)環(huán)境異常 | 環(huán)境變量未正確處理 | 檢查 .env 文件配置 |
進(jìn)階優(yōu)化
動(dòng)態(tài)路徑配置
// vite.config.js
export default defineConfig({
base: process.env.NODE_ENV === 'production'
? '/this/is/a/path/'
: '/'
})自定義 404 頁(yè)面處理
// router.js
const router = createRouter({
history: createWebHistory('/this/is/a/path/'),
routes: [
// ...
{
path: '/:pathMatch(.*)*',
component: () => import('@/views/404.vue')
}
]
})
部署路徑健康檢查
// main.js
if (import.meta.env.PROD) {
const expectedBase = '/this/is/a/path/';
const currentPath = window.location.pathname;
if (!currentPath.startsWith(expectedBase)) {
window.location.replace(expectedBase);
}
}
原理圖示
瀏覽器請(qǐng)求 -> 服務(wù)器 -> 檢查物理文件
├── 存在 -> 返回文件
└── 不存在 -> 返回 index.html (SPA 入口)
到此這篇關(guān)于Vue3+Vite項(xiàng)目部署后刷新白屏問(wèn)題的解決方法的文章就介紹到這了,更多相關(guān)Vue3刷新白屏問(wèn)題解決內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問(wèn)題
今天小編就為大家分享一篇解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
使用vue-cli+webpack搭建vue開(kāi)發(fā)環(huán)境的方法
這篇文章主要介紹了使用vue-cli+webpack搭建vue開(kāi)發(fā)環(huán)境的方法,需要的朋友可以參考下2017-12-12
vue data恢復(fù)初始化數(shù)據(jù)的實(shí)現(xiàn)方法
今天小編就為大家分享一篇vue data恢復(fù)初始化數(shù)據(jù)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
vue使用showdown并實(shí)現(xiàn)代碼區(qū)域高亮的示例代碼
這篇文章主要介紹了vue使用showdown并實(shí)現(xiàn)代碼區(qū)域高亮的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
vue 實(shí)現(xiàn)Web端的定位功能 獲取經(jīng)緯度
這篇文章主要介紹了vue 實(shí)現(xiàn)Web端的定位功能獲取經(jīng)緯度,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
Vue?列表過(guò)濾與排序的實(shí)現(xiàn)
這篇文章主要介紹了Vue?列表過(guò)濾與排序的實(shí)現(xiàn),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下2022-05-05

