composerでもってきたライブラリが保有するjavascriptやcssを公開ディレクトリ配下に排出する方法

きちんとした管理画面を作るのは、並大抵の事ではないため、管理画面もライブラリを使用してみます。 色々ある中で、今回は、更新頻度もありで、安定板でもあり、すぐ作れる、voyagerを試しに使ってみようとおもいます。

しかし、入れて早々難点がありました。 voyagerで使用しているjs,CSSが軒並み接続できなくなっていました。 原因は、composerでインストールしていたため、表示に必要な要素がvendorの中にありアクセスできない状態になっていました。 (ドキュメントを見ると、php artisan serveでウェブサーバーを起動するように書かれているので、 もし、webサーバーをlaravelの機能で運用する場合はこの解決方法ではない可能性があります。)

php artisan serve

実サーバーの運用や、dokerでの開発環境構築を考えるとそこは対応しないといけません。

原因

venderディレクトリ配下に設置されたcssを読みに行く事が前提になっているためでした。 laravelのドキュメントルート用ディレクトリと同列で、venderディレクトリがあるため、アクセスができない状態です。

解決方法

vendorディレクトリ内にある対象ファイルを排出して、http経由でもアクセスできるようにする必要があります。
そのために、2つやり方が考えられますが、今回は後者のファイルをコピーする方法で対応しようと思います。
前者は、出来るかもしれませんが、この方法の情報が見当たりませんでした。
ソース管理をしやすくする理由で、後者で対応します。

  1. シンボリックリンクを通して、vendor配下の対象ファイルに通す。
  2. vendor配下のファイルをコピーして、ドキュメントルート配下に置く。

また、vendor配下のファイルをコピーと言っても、必要なファイルを厳選して

手順

まず、vendorの中身をパブリッシュします。
もし、dockerを使っていない場合は、最初のdocker文は不要です。

$ docker-compose run (webserverのコンテナ) php artisan vendor:publish --provider="TCG\Voyager\VoyagerServiceProvider" --force

こうすると、publicディレクトリ配下にvendorで指定していたソースが排出されます。 provider単位で指定できるようなので、覚えると簡単かもしれません。

もし、公開ディレクトリがpublishではない場合

publicに吐き出されたファイルを公開ディレクトリ配下に移動すれば解決します。
コピーの仕方は手動、もしくは、vendorをコピーするためのproviderを用意するようです。
(公式ドキュメントを読んだ程度ですので、詳細はご確認ください。)
…が、ドキュメントルートを指定しないと変えられないと言うのは、自分の中では腑に落ちていないので、もしかしたら他の方法があるかもしれません。

参考方法

http://suga-tech3.hatenablog.com/entry/2016/07/24/181409 https://readouble.com/laravel/5.5/ja/packages.html