
Intro to ViteJS
Rambling
There used to be a time when I would write JavaScript in multiple files. They might look something like this.
// start.js
(function () {
// multiple js files of code
// end.js
})();
// use a makefile to join them together
Then I would use a make
file to run a script that just concatenated all those
files together. I didn’t care much about minification or optimization. I don’t
think I was alone here, I’m pretty sure I got this idea from an article way back
when. I do remember writing Ant scripts when the project was a mix of JavaScript
and Flash, that was fun.
If the project was big enough, there were tools like jsmin. If the project warranted it, I would use Dojo Toolkit, which could probably make me a sandwich if I wanted it to.
As a developer, no matter the language, build tools just come with the territory.
Ok, no more rambling
My point in all this is that if you’re not careful, build tools can get unweildy. This is where a tool like ViteJS comes in.
Vite is like a breath of fresh air. It handles ES modules natively, meaning that builds are super fast, because it just builds ESM, especially dev builds! Out of the box, you don’t even need a config file, it just works.
my vitejs config pic.twitter.com/q034T2ssvM
— Rene (Hecho En East Los) Rubalcava (@odoenet) August 18, 2021
Under the hood, Vite uses esbuild. For CSS, it can
handle PostCSS if you add a config for it, or
css-modules if you add
.module.css
files, or sass. It will also make
liberal use of the
import.meta
to add some sugar methods like
glob imports or adding
environment variables. You can switch the build to use
terser and get a slightly smaller build, but it is a
little slower. In my regular usage, I don’t notice a huge difference, so I leave
esbuild as default.
It handles JSON
and wasm
imports for you. Even
workers can be loaded via
import WorkIt from './workit?worker'
. Just when you thought you could escape
loader plugins, they drag you back in!
But I have some complex workflows, I use ejs
templates, I need sprite sheet
generation… I hear you. The great thing about Vite is that it uses
rollup, so you can use rollup plugins if you want.
It also has a suite of
vite plugins available. Just
add them to your vite.config.js
and you’re good
to go.
Most projects I don’t even need a config. It’s insane.
How to use it?
npm init vite@latest my-vite-app
When you run that command, you’ll be asked if you want a vanilla project or if you want react/preact/vue and even TypeScript. It’s really that simple and makes me smile.
Geez, I feel like this should be a longer blog post. But it really is that simple. Now, I wouldn’t try converting your large webpack application to Vite. Don’t get me wrong, webpack has a ton of plugins, loaders, community, and history.
I should note, I have had some issues in building third-party css where I need to modify the url imports, like I can with the resolve-url-loader for webpack, but that has been the only very specific issue I’ve run into.
Vite is another option, and one I think is great for new projects! In testing, I can get a smaller build with webpack, not much smaller, but smaller. So if squeezing every last kb out of your build is your goal, maybe webpack is your thing. You do you, and build awesome apps!
You can check out more info in this video below!