DEV Community

Cover image for Intro to ViteJS
Rene Rubalcava
Rene Rubalcava

Posted on • Originally published at

Intro to ViteJS


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
Enter fullscreen mode Exit fullscreen mode

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.

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
Enter fullscreen mode Exit fullscreen mode

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!

Top comments (2)

renanlazarotto profile image
Renan "Firehawk" Lazarotto

I'm learning ReactJS and when I heard about Vite I immediately tried it. Its lightyears faster than CRA and I don't regret at all moving to it. Now I don't have to wait a full minute in order to start my dev server!

gavinr profile image
Gavin Rehkemper

Great post - I agree, vite is great and seems to "just work" in a lot of cases.