Laravel9.2.x 使用 Vite 安装 bootstrap5

作者: 温新

分类: 【Laravel】

阅读: 2871

时间: 2022-07-08 14:50:35

hi,我是温馨,一名PHPer

与时俱进

Laravel 环境说明:Laravel9.2

Laravel9.2 开始已经使用 Vite 作为前端资源打包。按照以往的方式使用 bootstrap 时,会发现 bootstrap 样式并没有生效,而是默认使用了 Tailwind CSS样式。

本篇文章就记录,使用 Vite 在 Laravel9.2x 中安装使用 bootstrap5 样式。

第一步:创建项目

composer create-project  laravel/laravel la9_bootstrap

第二步:安装 Laravel UI

composer require laravel/ui

第三步:使用 bootstrap5

php artisan ui bootstrap --auth

若不需要使用 auth 系统,可以直接安装 php artisan ui bootstrap

第四步:vite.config.js 中导入 bootstrap5

这一步骤中,需要修改 vite.coffig.js 配置文件并删除 resources/css/app.css

修改前: vite.config.js

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel([
            'resources/css/app.css',
            'resources/js/app.js',
        ]),
    ],
});

【使用此处配置】修改后:vite.config.js

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import path from 'path'

export default defineConfig({
    plugins: [
        laravel([
            'resources/js/app.js',
        ]),
    ],
    resolve: {
        alias: {
            '~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap'),
        }
    },
});

第五步:在 js 中导入 bootstrap5 SCSS

这一步中,需要在 resources/js/app.jsresources/js/bootstrap.js 中导入 bootstrap

// resources/js/app.js

import './bootstrap';

import '../sass/app.scss'

import * as bootstrap from 'bootstrap'

第六步:使用 @vite 替换 mix()

使用 Vite 进行管理时,需要使用 @vite 模板指令替换 mix()助手函数。

# 将下面 2行替换成
 <link rel="stylesheet" href="{{ mix('css/app.css') }}">
 <script src="{{ mix('js/app.js') }}" defer></script>
     
# 替换为
@vite(['resources/js/app.js'])

下面就在 app.blade.php 模板文件中进行替换:

views/layouts/app.blade.php

<!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', 'Laravel') }}</title>

    <!-- Scripts -->
    @vite(['resources/js/app.js'])
{{-- <script src="{{ asset('js/app.js') }}" defer></script> --}}

<!-- Fonts -->
    <link rel="dns-prefetch" href="//fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">

    <!-- Styles -->
    {{-- <link href="{{ asset('css/app.css') }}" rel="stylesheet"> --}}
</head>
<body>
<div id="app">
    <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
        <div class="container">
            <a class="navbar-brand" href="{{ url('/') }}">
                {{ config('app.name', 'Laravel') }}
            </a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
                <span class="navbar-toggler-icon"></span>
            </button>

            <div class="collapse navbar-collapse" id="navbarSupportedContent">
                <!-- Left Side Of Navbar -->
                <ul class="navbar-nav me-auto">

                </ul>

                <!-- Right Side Of Navbar -->
                <ul class="navbar-nav ms-auto">
                    <!-- Authentication Links -->
                    @guest
                        @if (Route::has('login'))
                            <li class="nav-item">
                                <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
                            </li>
                        @endif

                        @if (Route::has('register'))
                            <li class="nav-item">
                                <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
                            </li>
                        @endif
                    @else
                        <li class="nav-item dropdown">
                            <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
                                {{ Auth::user()->name }}
                            </a>

                            <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
                                <a class="dropdown-item" href="{{ route('logout') }}"
                                   onclick="event.preventDefault();
                                                     document.getElementById('logout-form').submit();">
                                    {{ __('Logout') }}
                                </a>

                                <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
                                    @csrf
                                </form>
                            </div>
                        </li>
                    @endguest
                </ul>
            </div>
        </div>
    </nav>

    <main class="py-4">
        @yield('content')
    </main>
</div>
</body>
</html>

第七步:编译运行

npm install
npm run build

这样就可以咯,开始使用 bootstrap 样式吧。

请登录后再评论