Ставим фреймворк
composer create-project laravel/laravel
Ставим пакет для интерфейса
composer require laravel/ui
Устанавливаем bootstrap 5
php artisan ui bootstrap --auth
Выполняем
npm install
Ставим bootstrap-icons
npm install bootstrap-icons
Inside your project, open the file resources\sass\app.scss and add :
@import 'bootstrap-icons/font/bootstrap-icons.css';
// Fonts
@import url('https://fonts.bunny.net/css?family=Nunito');
// Variables
@import 'variables';
// Bootstrap
@import 'bootstrap/scss/bootstrap';
@import 'bootstrap-icons/font/bootstrap-icons.css';
Import vite.config.js Bootstrap 5 Path
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import path from 'path'
export default defineConfig({
plugins: [
laravel({
input: [
'resources/sass/app.scss',
'resources/js/app.js',
],
refresh: true,
}),
],
resolve: {
alias: {
'~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap'),
}
},
});
Update bootstrap.js
npm install lodash
import loadash from 'lodash'; window._ = loadash; // UPDATE THIS LINES OF bootstrap.js FILE import $ from 'jquery'; window.$ = $; import * as Popper from '@popperjs/core' window.Popper = Popper import 'bootstrap'; /** * We'll load the axios HTTP library which allows us to easily issue requests * to our Laravel back-end. This library automatically handles sending the * CSRF token as a header based on the value of the "XSRF" token cookie. */ import axios from 'axios'; window.axios = axios; window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; /** * Echo exposes an expressive API for subscribing to channels and listening * for events that are broadcast by Laravel. Echo and event broadcasting * allows your team to easily build robust real-time web applications. */ // import Echo from 'laravel-echo'; // import Pusher from 'pusher-js'; // window.Pusher = Pusher; // window.Echo = new Echo({ // broadcaster: 'pusher', // key: import.meta.env.VITE_PUSHER_APP_KEY, // wsHost: import.meta.env.VITE_PUSHER_HOST ?? `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`, // wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80, // wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443, // forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https', // enabledTransports: ['ws', 'wss'], // });
Now we need to import bootstrap 5 SCSS path in resources/js/app.js
file:
import './bootstrap';
import '../sass/app.scss'
use @vite directive
@vite(['resources/js/app.js'])
views/layouts/app.blade
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Install Bootstrap 5 in Laravel 10 With Vite') }}</title>
<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
@vite(['resources/js/app.js'])
</head>
<body>
<div id="app">
<nav >
<div >
<a href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}
</a>
<button type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span ></span>
</button>
<div id="navbarSupportedContent">
<!-- Left Side Of Navbar -->
<ul >
</ul>
<!-- Right Side Of Navbar -->
<ul >
<!-- Authentication Links -->
@guest
@if (Route::has('login'))
<li >
<a href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
@endif
@if (Route::has('register'))
<li >
<a href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif
@else
<li >
<a id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }}
</a>
<div aria-labelledby="navbarDropdown">
<a href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" >
@csrf
</form>
</div>
</li>
@endguest
</ul>
</div>
</div>
</nav>
<main >
@yield('content')
</main>
</div>
</body>
</html>
Installing jQuery in Laravel with Vite
jQuery is installed using a node package manager, with a single command from the terminal. I will use npm
.
At the root folder of your Laravel application run the following command.
npm install jquery --save-dev
You need to npm run build command to create asset bootstrap 5.
npm run build
Importing Select2 & Laravel Vite
To get it working without alias, follow these steps:
- Install jquery and select2:
npm i jquery select2 --save-dev
- Edit bootstrap.js for referencing jquery and select2
// import jquery and select2
import $ from "jquery";
import select2 from 'select2';
window.$ = $; // <-- jquery must be set
select2(); // <-- select2 must be called
- Import select2 CSS in app.js
//-- Select2
import "/node_modules/select2/dist/css/select2.css";
//--
import '../css/app.css';
// ...
Now you can use it in your components:
$('.js-example-basic-single').select2();