Published on August 14, 2024By DeveloperBreeze

Title: Integrating Vite with Laravel for Modern Web Development

Introduction

Laravel is a powerful PHP framework for building web applications, and Vite is a modern build tool that offers fast and efficient development for frontend assets. With the release of Laravel 9, Vite has become the default build tool, replacing Laravel Mix. This tutorial will guide you through integrating Vite with Laravel, configuring it for various environments, and using it to manage your frontend assets effectively.

Prerequisites

  • Basic knowledge of Laravel and PHP.

  • Familiarity with JavaScript, npm, and frontend development.

  • A Laravel project set up on your local machine.

Step 1: Setting Up a New Laravel Project

    • Create a New Laravel Project:

If you don't already have a Laravel project, create one using Composer:

composer create-project laravel/laravel my-vite-laravel-app
   

Navigate to your project directory:

cd my-vite-laravel-app
   

    • Install Dependencies:

Install the necessary npm dependencies:

npm install
   

This will install the dependencies listed in package.json, including Vite.

Step 2: Understanding Vite's Role in Laravel

In Laravel 9, Vite is configured to handle the build process for your frontend assets, including JavaScript, CSS, and more. Vite offers several benefits over traditional bundlers, including faster builds and improved hot module replacement (HMR).

    • Vite Configuration in Laravel:

The Vite configuration for Laravel is located in the vite.config.js file in the root of your project. This file defines how Vite should handle your assets.

By default, the vite.config.js file looks something like this:

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

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

This configuration tells Vite to process the app.css and app.js files in the resources directory and enables automatic page refresh when these files are updated.

Step 3: Configuring Vite with Laravel

    • Adding Additional Entry Points:

If your project has multiple JavaScript or CSS entry points, you can add them to the input array in vite.config.js:

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

This setup allows Vite to handle multiple assets and ensures they are compiled and optimized for production.

    • Customizing Output Directory:

By default, Vite outputs compiled assets to the public/build directory. You can change this by modifying the build configuration:

export default defineConfig({
       plugins: [
           laravel({
               input: ['resources/css/app.css', 'resources/js/app.js'],
               refresh: true,
           }),
       ],
       build: {
           outDir: 'public/assets',
       },
   });
   

This configuration will output the assets to the public/assets directory instead of public/build.

Step 4: Using Vite in Laravel Blade Templates

    • Loading Assets with Vite:

In your Blade templates, you can use the @vite directive to load your assets:

<!DOCTYPE html>
   <html lang="en">
   <head>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <title>My Vite Laravel App</title>
       @vite(['resources/css/app.css', 'resources/js/app.js'])
   </head>
   <body>
       <h1>Welcome to My Vite-Powered Laravel App!</h1>
   </body>
   </html>
   

The @vite directive ensures that the correct files are included during development and production, automatically handling versioning and cache busting.

    • Handling Hot Module Replacement (HMR):

Vite provides HMR out of the box, allowing your changes to reflect instantly without a full page reload. When the development server is running, Vite automatically injects the updated modules.

Start the Vite development server:

npm run dev
   

Your Laravel application will now use Vite's HMR, making your development process faster and more efficient.

Step 5: Building for Production

    • Optimizing Assets for Production:

When your application is ready for deployment, you can build your assets for production:

npm run build
   

This command compiles and minifies your assets, outputting them to the specified directory (e.g., public/build or public/assets).

    • Serving Compiled Assets:

In production, the @vite directive in your Blade templates will automatically point to the compiled and versioned assets, ensuring that your application loads quickly and efficiently.

Step 6: Advanced Vite Configuration

    • Adding Vite Plugins:

Vite's plugin system is powerful and flexible, allowing you to extend its functionality easily. For example, you can add a plugin to support TypeScript:

npm install @vitejs/plugin-vue
   

Then, add it to your vite.config.js:

import vue from '@vitejs/plugin-vue';

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

This setup allows you to build Vue components within your Laravel application.

    • Environment Variables:

Vite supports environment variables that you can use to manage different settings for development and production. Create .env.development and .env.production files in your project root:

VITE_API_BASE_URL=http://localhost:8000/api
   

Access these variables in your JavaScript files:

const apiUrl = import.meta.env.VITE_API_BASE_URL;
   

Conclusion

Integrating Vite with Laravel provides a modern, efficient way to manage your frontend assets. Vite's fast development server, hot module replacement, and optimized production builds make it an excellent choice for Laravel projects. In this tutorial, you learned how to set up Vite with Laravel, configure it for different environments, and use it to manage your project's frontend assets effectively.

Comments

Please log in to leave a comment.

Continue Reading:

Upload and Store File in Laravel

Published on January 26, 2024

php

Create Event and Listener in Laravel

Published on January 26, 2024

bash

Querying Data from Database Table in Laravel

Published on January 26, 2024

php

Laravel CSRF-Protected Form

Published on January 26, 2024

html

Create Resource Controller in Laravel

Published on January 26, 2024

bash

Laravel Validation Rules for User Registration

Published on January 26, 2024

php

Blade View in Laravel Extending Layout

Published on January 26, 2024

html