How will we build web apps in the future? Let's learn how esbuild and bundlers like Vite built on top of it work to see how it can speed up our dev workflows.
Vite - The Next Generation Frontend Tooling
AI Generated Video Summary
1. Introduction to VIT Build Tool
VIT is a build tool created by Evan Mew, the creator of VJS. It has two major parts: a dev server and a build commander. The dev server enhances native ES modules and provides fast modular placement, while the build commander bundles code in ES build during development and roll up in production. VIT solves the problem of slow feedback loop speed by leveraging the native support for ES modules in modern browsers. It allows you to write code as native ES modules and handles the parsing and serving of modules for you. VIT also serves as the entry point for VIT projects and can be extended using plugins.
So first of all, I'd like to thank React Advanced London for having me. So what is VIT? VIT is a French word, it means fast. It is a build tool created by Evan Mew, the creator of VJS. But VIT is a framework agnostic tool. I want you to think of VIT as these two things here. You can see a server and a bundler. So here, this build tool, VIT has two major parts. It's a dev server here, and a build commander you can also call as pre-configured bundler.
So the dev server provides rich feature enhancements over native ES modules, extremely fast hat modular placement, for instance, while the command bundles your code in ES build in development and roll up in production. And what else I can say about ES build? While it does dependency pre-bundling while roll up does some pre-configuration to output highly optimized static assets for production.
So the problem that we are trying to solve is the feedback loop speed during development. If you use React, especially in a large project, you probably noticed that hot module placement takes sometimes two, three, four, five, no depending on your machine, and you have to change your Webpack, config, JS, or enable caching, etc., just editing a single file. You may have to wait a few seconds for four things to update on the screen. This problem is due to the need for bundling. There's no way for the browser to actually support modularized code. That's the reason we have browserify, Webpack, Parcel, etc., so that modularized code can become one single file that can be run in the browser. We all know that most modern browsers natively support ES modules. This means that during development there's a large chunk of work that we no longer need to do because the browser can now handle them natively. In VIT, you're going to write your code as native ES modules. And VIT will take these ES modules and then parse the file and look for your import statements and then send HTTP requests for each module to the dev server. So the dev server just serves these modules as it's a very fast parsing. Yeah. So what else? So index HTML here is the entry point in VIT projects, not main.js that you'll often see in webpack projects. So think of it again as a dev server. Okay. So putting this all together VIT provides you with an extremely fast and lean development experience. Talking about plugins, VIT can be extended using plugins, which are based on Rollout's plugin interface. You'll see more about plugins in a bit. So to start VIT, can you send PM yarn, PM PM. Here's the commands you can use.
2. VIT Build Tool Demo
You can choose React, Vue, Preact, or vanilla VIT. We don't have Angular yet. Let's do a demo with vanilla VIT, then vanilla VIT-to-React. If we have time, we can migrate from CRI to React-Vite. We can try it here, VIT-demo. Install the VIT package and create an index file. Use the dev command to run the application on port 3000 and the preview command to compare the dev and production environment on port 5000. Check out the Node modules, including CS build, roll-up, and post-CSS.
And you can choose React, Vue, Preact, or vanilla VIT. Unfortunately, we don't have Angular here yet. Probably next year, because Angular has this very unique configuration, their build pipeline, build tool.
Yeah, let's do a demo here. So we're going to try vanilla VIT, then vanilla VIT-to-React. And if we have more time, we can do migrating from CRI to React-Vite. So yeah, we can try it here, say, VIT-demo.
Okay, close this. Now, maybe we can run npm init and start adding the VIT package. So yeah, here, npm install DashDev-save-vit. So while waiting for that, we can create an index file here. That's the entry point. And checkout, say, here. Yeah, see here, VIT 2.6.2. Let's remove the sample script here. Let's change it to, say, dev. This is GitHub Copilot helping me. And build or building the VIT project. Probably here, preview or bit preview. So what are these? Dev 2. Run your VIT project on a dev environment here. VIT build for building. That will create this. So dev, by the way, will run the application on port 3000. And then we can preview the build using this preview command here, which will run on port 5000. So basically, this is letting you preview your project in production. So you can compare the dev and production environment of your application or version of your application. And yeah, let's check out the Node modules here. See here, we have the CS build, roll-up, bit of post-CSS. So here, post-CSS.
4. Using SAS, React, and TypeScript in VIT
SAS is working easily. Let's convert this to React by importing React and ReactDOM. Use JSX and make sure it's JSX. It worked with React Fit. Requirement here is that it has to be JSX. You can force yourself to use JS only, but it's more performant to use JSX. Let's convert it to TypeScript (TSX).
Primary, or we could just cut this here. And then there you go, it worked. So yeah, SAS is working, works easily.
And what if let's try to convert this to React? Yeah, now we need our React and ReactDOM, right? So here we would need to import react-react, and ReactDOM also. Here it is, JSX file. Here, it says, OK, just return the React bit. Let's export that. And then probably we can remove this now. Or let's convert it to a proper HTML. Then paste this. It should be here. And we would need a div here. And we can put an ID, so I'll give it the name root. So it's root. Just go back here, convert it to JSX. And React DOM, root. Just need to import this. There you go. That should do it. Right? And make sure that this is JSX. Rendev. Let's see. And it worked with React Fit. So it works also. JSX out of the box.
So, yeah, requirement here is that has to be JSX. You can force yourself to use JS only, but I think you need to add a plugin because JSX because it's the text JSX and, you know, under the hood, this is more performance than just forcing yourself to use JS. It has something to do with their AST. OK, so what about TypeScript? Let's convert it to TypeScript. TSX.
5. Using TSX and React TypeScript in VIT
TSX and then just make sure that this is TSX as well. There you go. TypeScript works out of the box, right? And we can say, add props here. Now just testing, probably, here at the edit list. Yeah, should work. So, there you go, a bit vanilla, a little bit, and then we manage to convert it to react and react TypeScript.
So, maybe I can show you something about a project, a large project, it's using here. Oh, yeah, it's already. It's a big CLA project and converted to bit, but it was just a copy. So, I had to do some editing because I don't want to see the whole application. So, I just made here, what I call this, position absolute, left 8000. So, technically, or basically, the UI moved a few meters to the left and now I see a bit, hello, React.js. So, before it, it takes 3-4 seconds to see the changes in CRA. And then, once you move it to, after moving it to, it's like instant, less than a sec.
Okay, so requirement. Um, of course, you need to install the VIP package and then add necessary plug in. I mean, not necessary, sorry. Um, just, I have to add TSConfigPath because I'm using base URL or base source here. So you can see, TSConfig.json to the base URL here. So I need that plugin to work here. Uh, you can, you know, if you encounter any errors, you can just Google it and see, it will end up in a documentation or, you know, teaches you how to fix it using plugin and ReactJS X here so that you don't need to, um, explicitly write import React. Um, what else for this is, uh, technically this is a React TypeScript. So I'm adding global.js here, reference type to a Viet client, or you don't have to do this if you have this type's Viet client here. So yeah.
6. VIT Migration and Server-side Rendering
VIT allows for a quick migration from CRA to VIT. PostCSS support is included out of the box, and CSS modules can be used by ensuring the file ends in the .module.css suffix. Server-side rendering (SSR) is still experimental, but VIT can be used as a middleware in an existing Node.js server to enable SSR.
So that's it. A quick, quick migration from, from CRA to, to a VIT. So let's head back to our slides.
So yeah, PostCSS, you don't need to install PostCSS itself. It comes with PostCSS support out of the box. What about CSS modules? All you need to do is make sure this file ends in the .module.css suffix.
Server-side rendering. So, SSR support is still experimental. So, in SSR, the idea is, you want your code to run in Node.JS but you're writing code that's using ESM, right? If you're not using the latest version of Node.js with native ES module support, your code will not run, because previous versions of Node.js expect common .js. So, yeah, the idea in SSR is you can use Vitt as a middleware inside an existing Node.js server, right? So, if you're doing server-side rendering, you need to control your server, let's say an express server, then run Vitt as a middleware inside of it, and then invoke a method called Vitt, as you can see here, SSRLoadModule, and pass your server entry file path. Now, your server entry runs in Node.js, and it can use the same ES import syntax to load the rest of your application.