Como crear un proyecto con Laravel 10, Vue 3, Inertia JS, Vuetify 3 y Webpack

Indíce de contenidos

Introducción

El uso de estas herramientas es altamente beneficioso debido a la sinergia y eficiencia que aportan al proceso de desarrollo web. Laravel 10 ofrece una robusta estructura para el lado del servidor, simplificando tareas complejas y proporcionando una amplia gama de funcionalidades. Vue 3, por su parte, permite la creación de interfaces de usuario interactivas y reactivas, facilitando la interacción del usuario con la aplicación. Inertia JS optimiza la comunicación entre el front-end y el back-end, mejorando la velocidad y fluidez de la aplicación. Vuetify 3, con su conjunto de componentes predefinidos y personalizables, agiliza el diseño y la estilización. Finalmente, Webpack automatiza la construcción y optimización del código, mejorando la eficiencia y el rendimiento en la entrega de la aplicación. En conjunto, estas herramientas ofrecen un ecosistema completo y armonioso para el desarrollo web moderno, lo que simplifica el trabajo del programador y permite crear aplicaciones más rápidas y atractivas.

Instalación

Para comenzar a crear este proyecto lo primero que debes de hacer es instalar Laravel 10, Lo cual lo podremos hacer con este comando

composer create-project laravel/laravel laravel-vue-inertia-vuetify-webpack

Una vez que composer haya finalizado la creación del proyecto tendremos que acceder a la carpeta

cd laravel-vue-inertia-vuetify-webpack

Por defecto Laravel 10 viene con la configuración para vite, por lo que necesitaremos desinstalar un par de dependencias e instalar otras 

#Desinstalara dependencias que no necesitamos
npm uninstall vite laravel-vite-plugin

#Instalar dependencias
npm i
npm i --save-dev @inertiajs/vue3
npm i --save-dev @mdi/js
npm i --save-dev browser-sync
npm i --save-dev browser-sync-webpack-plugin
npm i --save-dev laravel-mix
npm i --save-dev vue
npm i --save-dev vue-loader
npm i --save-dev vuetify

también debemos de remover la propiedad type del package.json, si no lo hacemos nos generara errores más adelante.

Debemos de asegurarnos que la sección de scripts del package.json, quede de la siguiente forma.

"scripts": {
    "development": "mix",
    "watch": "mix watch",
    "watch-poll": "mix watch -- --watch-options-poll=1000",
    "hot": "mix watch --hot",
    "production": "mix --production"
},

y crearemos el archivo webpack.mix.js en la raíz de nuestro proyecto, con lo siguiente 

let mix = require('laravel-mix');

mix.css('resources/css/app.css', 'public/css')
    .js('resources/js/app.js', 'public/js/')
    .vue();

mix.browserSync('http://127.0.0.1:8000');

Ahora del lado del servidor necesitaremos instalar lo siguiente con composer

composer require inertiajs/inertia-laravel

Configuración

Lo primero que vamos a hacer es modificar nuestro archivo /resources/js/app.js, y tendrá que contener lo siguiente.

import './bootstrap';
import { createApp, h } from 'vue'
import { createInertiaApp, Link } from '@inertiajs/vue3'
import vuetify from './plugins/vuetify';
import Layout from './components/Layout'

createInertiaApp({
    resolve: name => {
        let page = require(`./Pages/${name}`);
        page.default.layout = page.default.layout || Layout
        return page;
    },
    setup({ el, App, props, plugin }) {
        createApp({ render: () => h(App, props) })
            .use(plugin)
            .use(vuetify)
            .component('Link', Link)
            .mount(el)
    },
})

Ahora necesitaremos inicializar vuetify, por lo que dentro de /resources tenderemos que crear la capeta plugins y dentro de la capeta plugins tendrá que haber un archivo vuetify.js

import 'vuetify/styles' //Estilos de vuetify
import { createVuetify } from 'vuetify'
import { mdi } from 'vuetify/iconsets/mdi-svg'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'

const vuetify = createVuetify({
    components,
    directives,
    //Indicamos el prefijo por defecto
    //Vueitfy soporta varias bibliotecas de iconos, pero acuparemos mdi
    icons: { 
        defaultSet: 'mdi',
        sets: {
            mdi,
        },
    },
    theme: {
        themes: {
            light: {
                dark: false,
                colors: {
                    //Ejemplo de donde personalizar los colores
                    primary: '#E53935',
                }
            },
        },
    },
})

export default vuetify

Por defecto Inertia establece que las páginas deben de estar en /resources/Pages, por lo que crearemos esta carpeta y dentro de ella crearemos un componente que se llame Inicio.vue, con lo siguiente: 

<template>
  <v-container class="">
    <v-card>
      <v-card-title primary-title> Titulo de la pagina </v-card-title>
      <v-card-text class="mt-10">
        <h1 class="text-h1">Hola mundo</h1>
      </v-card-text>
      <v-card-actions>
        <v-btn text color="primary"> Guardar </v-btn>
      </v-card-actions>
    </v-card>
  </v-container>
</template>

<script>
export default {
  name: "Inicio",
};
</script>

Ahora para que no tengas ningún problema con los estilos de vuetify vamos a añadir un layout que envuelva en los componentes principales que requiere vueitfy 

Este layout lo crearemos dentro de la capeta /resources/js/components,  y se llamará Layout.vue. Contendrá lo siguiente.

<template>
  <v-app id="inspire">
    <v-navigation-drawer v-model="menu">
      <!--  -->
    </v-navigation-drawer>

    <v-app-bar>
      <v-app-bar-nav-icon @click="menu = !menu">
        <v-icon :icon="mdiMenu" />
      </v-app-bar-nav-icon>

      <v-app-bar-title>Application</v-app-bar-title>
    </v-app-bar>

    <v-main>
      <slot></slot>
    </v-main>
  </v-app>
</template>

<script setup>
  import { mdiMenu } from '@mdi/js'
</script>

<script>
export default {
  name: "Layout",
  data: () => ({
    menu: false
  })
};
</script>

Ahora tendremos que añadir la vista de blade que sirve de envoltorio para inertia

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
    @vite('resources/js/app.js')
    @inertiaHead
  </head>
  <body>
    @inertia
  </body>
</html>

Y en la ruta web añadiremos lo siguiente para que se pueda visualizar nuestro componente

<?php

use Inertia\Inertia;
use Illuminate\Support\Facades\Route;


Route::get('/', function () {
    return Inertia::render('Inicio');
});

Ahora del lado del servidor debemos de ejecutar el siguiente comando para publicar el middleware de inertia 

php artisan inertia:middleware

y posterior a publicar el middleware necesitamos registrarlo en el grupo de los middlewares web en App\Http\Kernel.php

'web' => [
    // ...
    \App\Http\Middleware\HandleInertiaRequests::class,
],

Ahora solo necesitaremos ejecutar los siguientes comandos en terminales diferentes 

php artisan serve
npm run watch

Si todo salió bien y nos dirigimos a localhost:3000/inicio tendremos que ver lo siguiente 

Como crear un proyecto con Laravel 10, Vue 3, Inertia JS, Vuetify 3 y Webpack

y listo ya hemos terminado. 

Comentarios (0)
Deja un comentario
arrow-up-bold-circle