Weāve been using Laravel-Mix for years and itās been doing pretty good. However, recently we decided to build a project using Inertia.js (which was an awesome decision).
As the project started to grow, the development became a pain to wait for the webpack compiling.
Then, we decided to give Vite (from Vueās creator Evan You) and the results wereā¦ ASTONISHING!
Iāve been seeing Vite around in Twitter, but to be honest with you, I was not expecting THIS MUCH OF SPEED! š
Laravel-Mix was getting too so slow.
Benchmark Test on Hot Reloading (with 16" MBP 64gb ram, 2.4 GHz 8-Core Intel Core i9)
| Compilation | Laravel Mix | Vite |
|--------------------|-------------|-------|
| Initial Compile | 13257ms | 636ms |
| Change Reflection | 5848ms | 224ms |
Thaās like ā20x for initial compilationā and ā25x when code changeā š²
We are fascinated by results, so let me tell you how to set it up, so you can try it out too.
Migrating To Vite
- First, youāll need to install Vite:
npm install vite
- Then, install Tailwind
npm i tailwindcss postcss autoprefixer -D
- Create āvite.config.jsā and āpostcss.config.jsā in your project base
For the sake of completeness, here is Tailwind config (JIT is amazing as well!)
And finally, you need to configure your app.js
for Vite to work with Inertia.js. (The production compiling part kept me in the dark for a few hours)
Few things to keep in mind are:
- You canāt use
require(āfileā)
syntax, so you always need to useimport * from file.js
- You need to specify file extensions when importing Vue components, like
āimport FormInput from ā@/Shared/Form/FormInput.vueā
- āapp.jsā is the only point of entry for your app, so you need to import your app.css file in your app.js.
ā¦and your front-end is ready š
Setting up Laravel and package.json scripts
I wanted to run āhot reloadingā as well as āproductionā environment interchangeably in my local, so I came up with the below solution. (If you figure out a better way, Iād be happy to hear)
Vite in ādev modeā creates a local server in https://localhost:3000 (which can be configured in vite.config.js) whereas in āproduction modeā, it creates files in āpublic/distā.
- Edit your āpackage.jsonā file accordingly:
npm run vite
is hot reloading itself and npm run dev
is just for alias. The āpreā hooks are used to create a file in public directory so that the backend can figure out which mode is running.
Finally, you need to create a helper to resolve the path in your blade ā just like Laravel Mixās {{ mix('/js/app.js') }}
helper.
You can create this php file in āapp/Helpers/vite.phpā (or anywhere you like)
And include it to your ācomposer.jsonā
"autoload": {
"psr-4": {...},
"files": [
"app/Helpers/vite.php"
]
},
[make sure to run:composer dump-autoload
]
And finally add it to your master.blade.php
<!DOCTYPE html>
<html>
<head>
<!-- Stuff -->
{{ vite_assets() }} <!-- More Stuff -->
</head>
š You are all set. Enjoy the super-speed compiling times š
I believe this will change your development experience as drastic as it did to me! š
Iām really curious about your compiling speeds, please leave a comment. š¬
And lastly, if you enjoyed this read š or find it helpful, please give us a š and if youād like to read topics like this, go ahead and follow š