Vue3+Vite項(xiàng)目部署后刷新白屏問(wèn)題的解決方法
問(wèn)題現(xiàn)象
使用 Vue3 + Vite + vue-router 的項(xiàng)目在本地開(kāi)發(fā)正常,但打包部署到服務(wù)器后:
- 直接訪(fǎng)問(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', // 將資源分類(lèi)到 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-12vue data恢復(fù)初始化數(shù)據(jù)的實(shí)現(xiàn)方法
今天小編就為大家分享一篇vue data恢復(fù)初始化數(shù)據(jù)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10vue使用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-10vue 實(shí)現(xiàn)Web端的定位功能 獲取經(jīng)緯度
這篇文章主要介紹了vue 實(shí)現(xiàn)Web端的定位功能獲取經(jīng)緯度,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Vue?列表過(guò)濾與排序的實(shí)現(xiàn)
這篇文章主要介紹了Vue?列表過(guò)濾與排序的實(shí)現(xiàn),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下2022-05-05