X(Twitter) Zenn GitHub RSS 共有

Docker環境のViteでHMRが動かない、または遅い場合の対策

作成日時:2025-01-28
更新日時:2025-01-28

背景

Docker上でViteのHMRが動作しなかった。
動作するように修正したが、CPU使用率が常に100%となり使い物にならなかった。

仕事にならなかったので、改善策を調査した。
(環境はWindows11, WSL2)

結論

サーバーオプション#server.watch | Vite に記載されていた。

ViteをWSL2上で実行する場合、ファイルシステム監視が動作しない。
そのため、ポーリング形式で監視させる。

監視対象が多かったり、監視間隔が短い場合、CPU使用率が高くなる。
したがって、上記のチューニングを行う。

設定例

設定例は下記。(vite.config.jsとpackage.json)
設定内容の詳細に関しては公式資料を参照されたし。

設定値は各自調整すること。

vite.config.js

export default defineConfig({
  server: {
    hmr: {
      host: 'localhost', // HMR用のWebSocket接続のホストの指定
      overlay: false     // コンパイルエラー発生時のオーバーレイ表示の制御
    },
    watch: {
      // 不要なファイルを監視対象から除外
      ignored: [
        '**/node_modules/**',
        '**/dist/**',
        '**/.git/**',
        '**/vendor/**'
      ],
      usePolling: true,     // ポーリングを有効化
      interval: 5000,       // ポーリング間隔
      binaryInterval: 10000 // バイナリファイルのポーリング間隔
    }
  }
});

package.json

viteにhostオプションを追加する。
必要ないかもしれないが、私の環境ではこれが無いと動かなかった。

{
  "scripts": {
    "dev": "vite --host"
  }
}

メモ

初回アクセス時は遅い。CPU使用率は100%近くになった。
暫く待てばCPU使用率は下がり、変更が適宜画面に反映された。