Laravel に Nuxt.js プロジェクトを入れたい。
Nuxt.js の SSR は使わないものの、 Laravel の機能を API のみに閉じ込めて、完全に静的なクライアントで運用したいときなど。
生 Vue.js でも良いのだけど、置くだけ認識の Router/Vuex はかなり楽。
環境構築
$ laravel new myProject
$ cd myProject
$ vue init ~~~~~ myNuxt
$ mv myNuxt resouces/nuxt.js
$ rm package.json
$ mv resources/nuxt.js/package.json package.json
$ mv resources/nuxt.config.js nuxt.config.js
nuxt.config.js
に次のような変更を
module.exports = {
....
srcDir: "resources/nuxt.js/",
....
}
ひとまずコレで Nuxt が動くようになる。
Laravel APIを Proxy する
@nuxtjs/proxy
を使って、 Laravel のAPIをProxy する。
$ npm i @nuxtjs/proxy
nuxt.config.js
に次のような変更を
module.exports = {
modules: [
'@nuxtjs/proxy'
],
proxy:{
'/api' : "http://localhost:8000"
}
}
php artisan serve
で立てたサーバが /api
パスのリクエストを受け取れるようになる。
ビルド設定
このままではビルドしても Nuxtアプリケーションしか立ち上がらない。
まずは、nuxt.js のstatic フォルダの中に Laravel の public フォルダの中身を全部ぶち込む
これでとりあえず、 Laravel のファイルが generate 時に dist の中に生成されるようになる。
server 側での公開パスも dist を設定してやると良い。
あとは apatch の設定。 generate するので問題ないかもしれないが 404 系を Laravel が受け取るような設定になっているはずなので、 そのへんは API でよしなにする。
(単純に index.html側に向けるとAPIが動かなくなるので注意)
index.html が index.php より優先されるように設定しないと、Laravel の Welcome page が表示されるのでそのへんも注意。
サブディレクトリでのホストが可能であれば、 generate を public/app の中に…みたいなことも出来るが、多分画像とかのパスの設定とかおかしくなりそう。