【Laravel8】サブディレクトリに設置したアプリでlivewire.jsがnet::ERR_ABORTED 404 Not Found

Laravel8からログイン機能まわりにJetstreamが導入され、7以前のLaravelと比べてだいぶ中身も変わっていました。そんな中、開発環境では問題なかったのに本番環境へデプロイした時にlivewire.jsがnet::ERR_ABORTED 404と言われました。

原因

livewire.jsは、Jetstreamで使われているlivewireが書き出しているjsファイルです。コンパイルして書き出す際にパスを生成しているのですが、サブディレクトリの場合を考慮されてないようです。

対策

livewireのコンパイル設定を探しましたが、vendor内にあるため以下のコマンドで外に出します。

NACK様よりconfig/livewire.phpのみ外へ出す方法を教えていただきました。ページ下部のコメント欄をご参照ください。

php artisan livewire:publish

するとlivewire関連のファイルがいろいろ外に出てきますが、使いたいのはconfig/livewire.phpです。この中の以下の場所を編集します。

'asset_url' => null,

// という箇所を

'asset_url' => env('ASSET_URL', null),

// と変更します。

開発環境も本番環境も同じサブディレクトリなら直接ここにパスを書いても良いのですが、本番環境でのみサブディレクトリにしたいので、上記のようにenvファイルのASSET_URLを参照するように書きます。

次に本番環境のenvファイルに以下のようにASSET_URLをセットします。envファイル内のどこに入れてもいいです。

ASSET_URL="/subdir"

以上で404エラーが消えるはずです。反映されない場合は、以下のコマンドでconfigのキャッシュをクリアしてみてください。

php artisan config:cache

#または

php artisan config:clear

関連記事

【Laravel】サブディレクトリに設置したアプリでapp.js、app.cssがnet::ERR_ABORTED 404 Not Found