Skip to content

Instantly share code, notes, and snippets.

@otakuryo
Last active April 29, 2023 22:55
Show Gist options
  • Save otakuryo/a86a936d8da00fb9f455bff81e1c1d7f to your computer and use it in GitHub Desktop.
Save otakuryo/a86a936d8da00fb9f455bff81e1c1d7f to your computer and use it in GitHub Desktop.
Installation and configuration Innertia on Laravel y svelte

Setup innertia + Svelte on Laravel

1. Laravel setup

curl -s "https://laravel.build/laravel-svelte-01" | bash

2. Sail up (Docker up)

cd ./laravel-svelte-01 && ./vendor/bin/sail up -d

3. Open docker app bash

docker exec -ti laravel-svelte-v01-laravel.test-1 bash

4. Install innertia

  • composer require inertiajs/inertia-laravel
  • npm i @inertiajs/inertia @inertiajs/inertia-svelte @sveltejs/vite-plugin-svelte
  • php artisan inertia:middleware

5. Install Innertia on kernel of laravel

Add \App\Http\Middleware\HandleInertiaRequests::class on /app/Http/kernel.php::$middlewareGroups

6. Config vite.config.js

Copy vite.config.js from gits to /vite.config.js

7. Config app.js for svelte

Copy appSvelte.js from gits on /resources/js/appSvelte.js

8. Config first svelte view

Copy Welcome.svelte from gits to /resources/js/Pages/Home/Welcome.svelte

9. Config temporal route

On /routes/web.php add

use Inertia\Inertia;

Route::get('/innertia', function () {
    return Inertia::render('Home/Welcome', [
        'name' => 'World'
    ]);
});

10. Config package.json

Add on package.json:

{
  "dependencies": {
  },
  "type": "module"
}

11. Init server svelete for dev

npm run dev

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=figtree:400,600&display=swap" rel="stylesheet" />
<!-- ViteConfiguration -->
@vite('resources/js/appSvelte.js')
@inertiaHead
</head>
<body>
<!-- Vite Configuration -->
@inertia
</body>
</html>
import './bootstrap';
import { createInertiaApp } from '@inertiajs/inertia-svelte'
import { Inertia } from "@inertiajs/inertia";
createInertiaApp({
resolve: name => {
const pages = import.meta.glob('./Pages/**/*.svelte', { eager: true })
return pages[`./Pages/${name}.svelte`]
},
setup({ el, App, props }) {
new App({ target: el, props })
},
})
class Kernel extends HttpKernel
{
protected $middlewareGroups = [
'web' => [
// ...
\App\Http\Middleware\HandleInertiaRequests::class,
],
'api' => [
// ...
],
];
}
Setup innertia + Svelte on Laravel 10
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import { svelte } from '@sveltejs/vite-plugin-svelte';
export default defineConfig({
plugins: [
laravel.default({
input: ['resources/css/app.css', 'resources/js/appSvelte.js'],
refresh: true,
}),
svelte({})
],
});
<script>
export let name = 'Not name.';
const saludo = "Hi Agustin!";
let counter = 1;
const onClick = () => counter++;
</script>
<h1>{saludo}</h1>
<button on:click={onClick}>Counter: {counter}</button>
<p>{name}</p>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment