Skip to content

2. Instalación y configuración inicial

En esta guía, aprenderemos a configurar Inertia.js con Laravel y Vue 3 desde cero. Seguiremos un proceso paso a paso para asegurarnos de que todos los componentes estén correctamente integrados.

Antes de comenzar con la instalación de Inertia.js, necesitamos asegurarnos de tener los siguientes requisitos:

Necesitas tener instalado Laravel 8.x o superior. Puedes crear un nuevo proyecto de Laravel con:

Terminal window
composer create-project laravel/laravel nombre-proyecto
cd nombre-proyecto

Asegúrate de tener Node.js (v14 o superior) y npm instalados en tu sistema:

Terminal window
node -v
npm -v

Inertia.js funciona con varios frameworks frontend, pero en esta guía nos centraremos en Vue 3. Para instalar Vue 3 en tu proyecto Laravel:

Terminal window
npm install vue@next

Instalación de paquetes de Inertia (Laravel Adapter y Vue Adapter)

Section titled “Instalación de paquetes de Inertia (Laravel Adapter y Vue Adapter)”

Inertia.js requiere dos componentes principales: un adaptador para el servidor (Laravel) y otro para el cliente (Vue).

1. Instalación del adaptador para Laravel

Section titled “1. Instalación del adaptador para Laravel”

Primero, instala el paquete de Inertia para Laravel usando Composer:

Terminal window
composer require inertiajs/inertia-laravel

A continuación, instala el paquete de Inertia para Vue 3:

Terminal window
npm install @inertiajs/vue3

3. Instalación de dependencias adicionales

Section titled “3. Instalación de dependencias adicionales”

También necesitamos algunas dependencias adicionales para el desarrollo:

Terminal window
npm install laravel-vite-plugin @vitejs/plugin-vue -D

Configuración del middleware HandleInertiaRequests

Section titled “Configuración del middleware HandleInertiaRequests”

Inertia.js requiere un middleware para gestionar las solicitudes y respuestas. Este middleware se encarga de determinar si una solicitud es una solicitud Inertia y de proporcionar datos compartidos a todas las vistas.

Puedes publicar el middleware predeterminado con:

Terminal window
php artisan inertia:middleware

Esto creará un nuevo archivo en app/Http/Middleware/HandleInertiaRequests.php.

Ahora, registra el middleware en tu archivo app/Http/Kernel.php añadiéndolo al grupo web:

app/Http/Kernel.php
protected $middlewareGroups = [
'web' => [
// ... otros middlewares
AppHttpMiddlewareHandleInertiaRequests::class,
],
];

El middleware HandleInertiaRequests incluye un método share() que te permite definir datos que estarán disponibles en todas las páginas de tu aplicación:

app/Http/Middleware/HandleInertiaRequests.php
public function share(Request $request): array
{
return [
'auth' => [
'user' => $request->user() ? [
'id' => $request->user()->id,
'name' => $request->user()->name,
'email' => $request->user()->email,
] : null,
],
'flash' => [
'message' => fn () => $request->session()->get('message'),
'error' => fn () => $request->session()->get('error'),
],
// Agrega aquí más datos compartidos
];
}

Ahora necesitamos configurar el punto de entrada de nuestra aplicación JavaScript para inicializar Inertia.js con Vue 3.

Primero, actualiza tu archivo vite.config.js para incluir el plugin de Vue:

vite.config.js
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [
laravel({
input: ['resources/css/app.css', 'resources/js/app.js'],
refresh: true,
}),
vue({
template: {
transformAssetUrls: {
base: null,
includeAbsolute: false,
},
},
}),
],
resolve: {
alias: {
'@': '/resources/js',
},
},
});

Crea o actualiza tu archivo resources/js/app.js para inicializar Inertia.js con Vue 3:

resources/js/app.js
import { createApp, h } from 'vue';
import { createInertiaApp } from '@inertiajs/vue3';
import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
createInertiaApp({
// La función resolve indica cómo cargar los componentes de página
resolve: (name) => resolvePageComponent(`./Pages/${name}.vue`, import.meta.glob('./Pages/**/*.vue')),
// Configura el elemento raíz donde se montará la aplicación
setup({ el, App, props, plugin }) {
createApp({ render: () => h(App, props) })
.use(plugin)
.mount(el);
},
});

Crea un archivo de plantilla Blade que servirá como punto de entrada para tu aplicación Inertia:

resources/views/app.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Estilos y scripts -->
@vite(['resources/css/app.css', 'resources/js/app.js'])
@inertiaHead
</head>
<body>
@inertia
</body>
</html>

Para verificar que todo funciona correctamente, configura una ruta de prueba en routes/web.php:

routes/web.php
use IlluminateSupportFacadesRoute;
use InertiaInertia;
Route::get('/', function () {
return Inertia::render('Welcome', [
'title' => 'Mi aplicación con Inertia',
]);
});

Crea un directorio resources/js/Pages y dentro un archivo Welcome.vue:

resources/js/Pages/Welcome.vue
<template>
<div class="container">
<h1>{{ title }}</h1>
<p>Bienvenido a tu aplicación con Inertia.js y Vue 3</p>
</div>
</template>
<script setup>
defineProps({
title: String,
});
</script>

Finalmente, compila los assets y ejecuta el servidor de desarrollo:

Terminal window
npm run dev
php artisan serve

Visita http://localhost:8000 en tu navegador y deberías ver tu primera página con Inertia.js funcionando.

Para mantener tu proyecto organizado, te recomendamos seguir esta estructura de directorios para los componentes de Vue:

resources/js/
├── Components/ # Componentes reutilizables
├── Layouts/ # Layouts de página
├── Pages/ # Componentes de página (rutas)
│ ├── Auth/ # Páginas de autenticación
│ ├── Users/ # Páginas relacionadas con usuarios
│ └── Welcome.vue # Página de inicio
└── app.js # Punto de entrada

Esta estructura te ayudará a mantener tu código organizado a medida que tu aplicación crece.

🐝