LaravelとViteでVue.jsのCSSが反映されない問題の解決手順
はじめに
LaravelでフロントエンドのビルドツールとしてViteを使用している際、Viteを起動してもCSSが反映されない問題に直面しました。
ブラウザのデベロッパーツールで確認してみると、以下のようなエラーが表示されていました。

GET http://[::1]:5173/resources/css/app.css net::ERR_EMPTY_RESPONSE
GET http://[::1]:5173/resources/js/app.js net::ERR_EMPTY_RESPONSE
GET http://[::1]:5173/@vite/client net::ERR_EMPTY_RESPONSE
このエラーの原因は、以下の2点でした。
- 
Dockerの設定で、Viteが使用するポート5173がホスト(Docker外)に公開されていなかったこと
 - 
Viteが「Local」(localhost)は監視しているが、「Network」(ネットワーク越しのアクセス)は監視していないこと
 
環境
- Laravel - 12.0
 - vite - 6.2.5
 - vue - 3.5.13
 
改善する手順
1. サーバのポート5173の設定を追加する
portsの部分を追記する
services:
  workspace:
    build:
      context: .
      dockerfile: ./docker/php-fpm/Dockerfile
    volumes:
      - ${APP_CODE_PATH_HOST}:/var/www/html/
+   ports:
+     - "5173:5173"
docker/php-fpm/DockerfileにEXPOSEの設定を追加
  FROM php:8.3-fpm
+ EXPOSE 5173
設定後にDockerコンテナを再起動する。
2. vite.config.jsに設定を追記する
まず、@vitejs/plugin-vueをインストールします。これにより、ViteでVue.jsをサポートできるようになります。
docker compose exec frontend npm install -D @vitejs/plugin-vue
- 
エイリアスの設定
Viteがvueを正しく認識するように、resolve.aliasにVueのエイリアスを追加します。これにより、vue/dist/vue.esm-bundler.jsを指定することで、Vueのバンドル版を使用できます。 - 
プラグインの追加
pluginsの設定に、先ほどインポートしたvue()を追加します。これにより、ViteはVue.jsのコンポーネントを適切に処理できるようになります。 - 
開発サーバーの設定
serverセクションを追加することで、コード変更が即座にブラウザに反映される「ホットモジュールリプレースメント(HMR)」が有効になります。host: trueで他のデバイスからもアクセスでき、hmr.host: 'localhost'で正常に動作します。 
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
+ import vue from '@vitejs/plugin-vue';
export default defineConfig({
+ resolve: {
+   alias: {
+     vue: 'vue/dist/vue.esm-bundler.js',
+   },
+ },
  plugins: [
+   vue(),
    laravel({
      input: ['resources/css/app.css', 'resources/js/app.js'],
      refresh: true,
    }),
  ],
+ server: {
+   host: true,
+   hmr: {
+     host: 'localhost',
+   },
+ },
});
これで、コンソールのエラーが解消され、CSSも正しく読み込まれるはずです。
さいごに
今回は、LaravelとViteでVue.jsのCSSが反映されない問題を解決する手順を紹介しました。Dockerのポート設定とViteの設定を調整することで、開発環境が正常に動作するようになったため、この記事を作成しました。
参考
Discussion