「npm run dev」してもCSSとJSファイルが反映されない…
Laravel 8で「Laravel Mix」を使用してアプリ開発の練習をしていた際に、npm run dev
コマンドを打った後、ブラウザで確認してもCSSとJSファイルが反映されなかったことがあったので、その解決メモ。
最初に答えを言ってしまうと、バージョン付け をすることで、ブラウザのキャッシュ対策をすれば解決できました。
Laravel 8をインストールした直後では、webpack.mix.js
は以下のような感じだと思います。
mix.js('resources/js/app.js', 'public/js')
.postCss('resources/css/app.css', 'public/css', [
// 略
]);
これを以下のように .version()
を付けくわえてください。
mix.js('resources/js/app.js', 'public/js')
.postCss('resources/css/app.css', 'public/css', [
// 略
])
+ .version();
この様に.version()
を付けた後に、npm run dev
を実行します。
この 「webpack.mix.js
に .version()
を付けて、コマンドで npm run dev
を実行する」 というのは、以前のキャッシュファイルが読み込まれないようにするために、コンパイルされたCSSファイル及びJSファイル名に一意のハッシュを付け加えていることを意味します。
public/mix-manifest.json
を見てみてください。
{
"/js/app.js": "/js/app.js?id=********************",
"/css/app.css": "/css/app.css?id=********************"
}
***
のところはハッシュの文字列になっていると思います。
これで、一意なハッシュを加えたファイル名として読み込めば、以前のキャッシュされたファイルを読み込むことを防げるというわけです。
あとは、resources/views
フォルダ内のレイアウトファイル等に書かれている asset
関数の部分を mix関数
に変更することで、再程、npm run dev
を実行して生成された 最新のバージョン付けされたファイル
を自動的に読み込むことができます。
<!-- Styles -->
- <link rel="stylesheet" href="{{ asset('css/app.css') }}">
+ <link rel="stylesheet" href="{{ mix('css/app.css') }}">
<!-- Scripts -->
- <script src="{{ asset('js/app.js') }}" defer></script>
+ <script src="{{ mix('js/app.js') }}" defer></script>
もし、npm run dev
してもCSSが反映されない…となったときは、ぜひ.version()
のことを思い出してください。