Skip to main content

Black Friday 2025! Only until December 1st: coupon FRIDAY25 for 40% off Yearly/Lifetime membership!

Read more here
Tutorial Free

How to Add Vue.js 3 into Laravel 11 with Vite: Quick Tutorial

September 27, 2023
3 min read

Tutorial last revisioned on March 15, 2024 with Laravel 11

In this tutorial, we will instruct you on how to add Vue.js to an existing Laravel project. These steps are applied to fresh Laravel installation with the Breeze starter kit but should work on your existing project as well.

Here are the versions of software we used for this tutorial:

  • NodeJS v20.10.0
  • NPM v10.2.3
  • Vite v5.0
  • Laravel v11.0.3

Vue Installation and Vite Config

Install the Vue Vite plugin.

npm install --save-dev @vitejs/plugin-vue

And add the Vue config part to the vite.config.js file.

vite.config.js

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue';
 
export default defineConfig({
plugins: [
laravel({
input: [
'resources/css/app.css',
'resources/js/app.js',
],
refresh: true,
}),
vue({
template: {
transformAssetUrls: {
base: null,
includeAbsolute: false,
},
},
}),
],
resolve: {
alias: {
vue: 'vue/dist/vue.esm-bundler.js',
},
},
});

Sample Component and Mounting Vue to Blade

Now, let's create the IncrementCounter.vue component for testing purposes.

resources/js/components/IncrementCounter.vue

<script setup>
import { ref } from 'vue'
 
const counter = ref(0)
</script>
 
<template>
<button
type="button"
@click="counter++"
class="p-2 text-white bg-gray-500 rounded"
>
Counter is: {{ counter }}
</button>
</template>

Then add the id="app" attribute to html <body> tag. We will mount Vue to the whole page instead of some section of the page. This way, we can use Vue components anywhere in our Blade files.

resources/views/layouts/app.blade.php

</head>
<body class="font-sans antialiased">
<body id="app" class="font-sans antialiased">
<div class="min-h-screen bg-gray-100">

Import vue and register the newly created component in the app.js file and mount it to the #app element.

*resources/js/app.js

import { createApp } from 'vue';
import IncrementCounter from './components/IncrementCounter.vue';
 
createApp({})
.component('IncrementCounter', IncrementCounter)
.mount('#app')

Include the Vue Component in the dashboard.blade.php file to test if it works.

resources/views/dashboard.blade.php

<div class="p-6 text-gray-900">
{{ __("You're logged in!") }}
<increment-counter />
</div>

Finally, run Vite to compile everything.

npm run dev

The component should now be rendered on the Dashboard page.

Vue Component


You can also learn the full process of using Vue in Laravel in our course: Vue.js + Laravel + Vite: SPA CRUD

Enjoyed This Tutorial?

Get access to all premium tutorials, video and text courses, and exclusive Laravel resources. Join our community of 10,000+ developers.

Comments & Discussion

LA
Luis Antonio Parrado ✓ Link copied!

Why to install vue-loader@next if we are working with Vite instead of Webpack (laravel mix)?

DL
David Lun ✓ Link copied!

typo. fixed.

We'd Love Your Feedback

Tell us what you like or what we can improve

Feel free to share anything you like or dislike about this page or the platform in general.