Get up and running in just a few minutes with Bootstrap 5, Laravel 9 and live hot loading with Vite.
Note: For this article we’re using XAMPP with a VHOST domain setup as vsbootstrap.local. If you need help setting up an Apache VHOST to work with XAMPP and Laravel, check out our tutorial here.
1) Create a new DB
2) Create new Laravel project
composer create-project laravel/laravel vs-bootstrap
3) Update .env: DB credentials and APP_URL
4) Install node modules
npm install
5) Run migrations
php artisan migrate
6) Check that your environment and project have been setup correctly:
npm run dev
Visiting the address vsbootstrap.local should now show you the default laravel welcome page.
7) Note: In order for hot reloading to work, add the @vite directive to the head of your blade layout template:
... @vite(['resources/css/app.css', 'resources/js/app.js'])
8) Install bootstrap via NPM
npm install bootstrap@v5.2.3
9) Install sass via NPM
npm install sass
10) Update your vite.config.js (path var and alias), should look something like this:
import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; const path = require('path'); export default defineConfig({ resolve: { alias: { '~bootstrap': path.resolve('node_modules/bootstrap'), } }, plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true, }), ], });
11) Create a scss file in /resources/scss/app.scss and import the bootstrap css:
@import "~bootstrap/scss/bootstrap";
12) Import the scss in your /resources/js/app.js file:
import '../scss/app.scss';
13) You should now have bootstrap css running with laravel and vite. You may need to restart vite (ctrl+c to exit if it’s already running). For a quick test, try editing the welcome.blade.php to look something like this:
<!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, Vite and Bootstrap</title> @vite(['resources/css/app.css', 'resources/js/app.js']) </head> <body class="antialiased p-4"> <div class="alert alert-success"> I'm a bootstrap alert!</div> <h1 class="text-center">Hello Bootstrap</h1> <p class="mt-5 text-center"> <a href="#" class="btn btn-success">I'm a bootstrap button!</a> </body> </html>
Project files are available on github.
14) For production builds (npm run build), if your blade files use Vite::assets, put this in your app.js :
import.meta.glob([
'../images/**',
]);
Without the above you will get the error ‘Unable to locate file in Vite manifest: …’,
For more info on this, see https://laravel.com/docs/9.x/vite#blade-processing-static-assets