できない.dev

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.tsbase 設定漏れがほぼ確実です。
本番配信先がサブパス(GitHub Pages の /repo-name/ 等)なら base を合わせて再ビルドします。

よくある原因

  1. base/ のまま: vite.config.tsbase を指定しないとアセットは絶対パス /assets/... で出力されるが、サブパス配信先では 404 になる。
    preview もこれを再現する。
  2. 古い dist/ を見ている: base を書き換えたあと vite build を流し直していない。
    preview は dist/ をそのまま静的配信するだけなので変更が反映されない。
  3. Router 側の basename がずれている: アセットは読めるが画面が真っ白なら、React Router の <BrowserRouter basename="..."> や Vue Router の createWebHistory("...")base と食い違ってルーティングに失敗している。
  4. 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)でキャッシュごと破棄します。

この記事は役立ちましたか?