29
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel vuecli最短レシピ(ついでにvuetify導入)

Last updated at Posted at 2019-12-16

本記事はうるる Advent Calendar 2019 16日目の記事です。

はじめに

laravel×vuecliでまとまった記事がなかったのでまとめた

要件

  • vuecliの雛形をそのまま使用できるようにする
  • 今回はLaravel Mixは使わない

というのもvuecliに新機能が追加されてもLaravel Mixが対応するのが遅いと使えないというデメリットがあるから
なるべくvueは独立させてlaravelに依存しないようにしたい

構成

スクリーンショット 2019-12-15 23.57.52.png

ざっくり解説

frontendディレクトリがvuecliプロジェクト
frontendでnpm run buildすると
resources/views/spa/app.blade.phpが作成される

Laravelのプロジェクトを作成する

composer create-project laravel/laravel sampleApp --prefer-dist "5.5.*"

Laravel Mixの削除

今回はlaravelの初期で入っているLaravel Mixを使わないのでそれらを削除する

rm -rf package.json webpack.mix.js yarn.lock resources/assets

Vue CLIのインストール

Vue CLIをインストールしてVue CLIを使ってフロントエンドのプロジェクトを作成する
vueRouter使用する

npm install -g @vue/cli
vue create frontend

frontendディレクトリに移動する
frontend/src/app/とするための作業

cd frontend
mv src app
mkdir src
mv app src

それに伴う変更

src/app/views/Home.vueの編集

import HelloWorld from "@/app/components/HelloWorld.vue"

vue.config.jsファイルを作る

touch vue.config.js

vue.config.js

module.exports = {
  // アセットはLaravelの `public` の `app` ディレクトリ配下に作成されるようにする.
  outputDir: '../public/app',
  
  
  // app配下にjs, cssなどが置かれるので、publicPathを調整する
  publicPath: '/app',
  
  
  pages: {
  // appのエントリポイント、テンプレート、出力先を調整
    app: {
      entry: 'src/app/main.js',
      template: 'templates/base.html',
      filename: '../../resources/views/spa/app.blade.php',
    },
  },
};

これでnpm run buildするとbladeの出力とアセットの出力がされる

Vue CLIのpagesでは、アセット(js, cssなど)をテンプレートに自動注入する設定をpages.<アプリ名>.templateで指定することができる
laravelのpublic/index.htmlをアセット注入用のテンプレートとして使用する

mkdir templates
mv public/index.html templates/base.html

これでvue側の設定は完了

laravelのルーティングをいじっておく

コントローラーを作る

php artisan make:controller SpaController
<?php


namespace App\Http\Controllers;


use Illuminate\Http\Request;


class SpaController extends Controller
{
    public function app()
    {
        return view('spa/test');
    }
}

ルーティングもいじる

routes/web.php

Route::get('/app', 'SpaController@app');

Laravelのルーティングに合わせてvueCliのrouter.jsも編集する
frontend/src/app/router.jsの編集

export default new Router({
  mode: 'history',
  base: '/test/', // ←修正

ここまででlaravel vuecli の連携は終わり

npm run build

http://vuetest.test/test
これでvueが表示できたらここまで成功

今回は実装しないがVueとLaravel間でAPIの結合は定番のaxiosでできる

番外編(vuetify導入)

npm install vuetify

base.htmlのheadに追加

<link href='https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons' rel="stylesheet">

とりあえず確認のためApp.vueをvuetify対応に書き換える

<template>
  <v-app id="inspire">
    <v-btn>button</v-btn>
  </v-app>
</template>


<script>
export default {
  data: () => ({
  }),
  props: {
    source: String
  },
  methods: {
  }


};
</script>

Main.js編集

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import Vuetify from 'vuetify' // ←追加
import 'vuetify/dist/vuetify.min.css' // ←追加
Vue.use(Vuetify) // ←追加
const vuetify = new Vuetify(); //←追加

Vue.config.productionTip = false

new Vue({
router,
vuetify, //←追加render: h => h(App)
}).$mount('#app')

vuetifyの導入も簡単ですね

まとめ

大好きなvuecliをそのままそっくりlaravelに入れることができました
実際に会社の業務で0からプロジェクトを作ることがないのでいい経験になりました
特にエントリーポイントを意識したことがなかったので学びが多かったです

参照

29
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?