vite preview がブランク(真っ白)で表示できない
`vite preview` がブランクになる原因の大半は `base` 設定漏れによるアセットの 404。
GitHub Pages 等のサブパス配信時は `vite.config.ts` の `base` を本番値に揃える必要がある。
#preview#build#base#deploy
公開:
要約
vite preview で開いた画面が真っ白で、DevTools の Network タブを見るとアセット(/assets/index-xxx.js 等)が 404 か MIME エラーになっている — というのは vite.config.ts の base 設定漏れがほぼ確実です。
本番配信先がサブパス(GitHub Pages の /repo-name/ 等)なら base を合わせて再ビルドします。
よくある原因
baseが/のまま:vite.config.tsのbaseを指定しないとアセットは絶対パス/assets/...で出力されるが、サブパス配信先では 404 になる。
preview もこれを再現する。- 古い
dist/を見ている:baseを書き換えたあとvite buildを流し直していない。
preview はdist/をそのまま静的配信するだけなので変更が反映されない。 - Router 側の basename がずれている: アセットは読めるが画面が真っ白なら、React Router の
<BrowserRouter basename="...">や Vue Router のcreateWebHistory("...")がbaseと食い違ってルーティングに失敗している。 - Service Worker のキャッシュ: 過去にデプロイした SW が古い
index.htmlを返してアセットの hash が合わない。
解決策
1. base を合わせて再ビルド
import { defineConfig } from "vite";
export default defineConfig({
base: "/repo-name/",
});そして再ビルド + preview。
npm run build
npm run previewルート配信(独自ドメイン直下)なら base: '/' のままで OK。
配信先のパスに合わせるのが原則です(公式: Public base path)。
2. Router を import.meta.env.BASE_URL 起点に
import { BrowserRouter } from "react-router-dom";
<BrowserRouter basename={import.meta.env.BASE_URL}>
{/* ... */}
</BrowserRouter>;base を書き換えたときに片方だけ忘れる事故を防げます。
3. Service Worker を解除
DevTools の Application タブ → Service Workers → Unregister を実行し、ハードリロード(Cmd/Ctrl + Shift + R)でキャッシュごと破棄します。