When working with React, Vite offers a streamlined development experience with a few key differences from the traditional Create React App setup. This blog post will explore the structure of a typical Vite project, focusing on key files such as index.html
, main.jsx
, and App.jsx
.
1. index.html
In a Vite-powered React application, index.html
serves as a critical starting point. Unlike Create React App, where scripts are injected automatically, Vite requires you to specify the script files directly. This explicit inclusion simplifies understanding the entry points and dependencies of your application.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite + React</title>
</head>
<body>
<div id="root"></div>
<!-- The root div where your React app will be mounted -->
<script type="module" src="/src/main.jsx"></script>
<!-- The script tag importing your main JavaScript module -->
</body>
</html>
In this example, you can see the script tag directly loading main.jsx
. This direct inclusion is a major difference from Create React App, enhancing clarity and control over the project's entry points.
1.1 Dependencies
To ensure your script files load correctly, Vite leverages modern ES module imports. Ensure your package.json
includes necessary dependencies:
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
}
Explicitly including the script in the HTML file ensures the correct loading and execution order of your application, mitigating potential issues with script loading.
2. main.jsx
The main.jsx
file serves as the entry point for your React application. This file is responsible for rendering the root component into the DOM. It's typically the file specified in the src
attribute of the script tag in your index.html
.
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App.jsx';
import './index.css';
// Render the root component into the root element in the HTML
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<App />
</React.StrictMode>
);
In this file, ReactDOM.createRoot
is used to render the App
component into the HTML element with the id root
. This direct rendering approach, without holding any root elements temporarily, streamlines the process, making it clear where the application starts and what components are involved.
3. App.jsx
The App.jsx
file contains the definition of your main App
component. This component serves as the root of your React component tree.
import React from 'react';
const App = () => {
return (
<div className="App">
<h1>Hello, Vite and React!</h1>
</div>
);
};
export default App;
In this file, you define the main structure and behavior of your application. The App
component is where you'll build out the primary UI and functionality, just like you would in any other React project.
Additional Materials and Best Practices
4. Using Tailwind CSS with Vite
Tailwind CSS can be easily integrated into a Vite project for utility-first styling.
- Install Tailwind CSS:
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
- Configure Tailwind:
Update tailwind.config.js
with your project's specific paths:
module.exports = {
content: ['./index.html', './src/**/*.{js,jsx,ts,tsx}'],
theme: {
extend: {},
},
plugins: [],
};
- Include Tailwind in your CSS:
Update index.css
to include Tailwind's base, components, and utilities:
@tailwind base;
@tailwind components;
@tailwind utilities;
5. Hot Module Replacement (HMR)
Vite offers HMR out of the box, allowing you to see changes in real-time without refreshing the page.
6. Environment Variables
Vite uses .env
files to manage environment variables. Create a .env
file at the root of your project and define your variables:
VITE_API_URL=https://api.example.com
Access these variables in your application using import.meta.env
:
const apiUrl = import.meta.env.VITE_API_URL;
7. Optimized Build Process
Vite's build command (vite build
) uses Rollup under the hood to produce highly optimized static assets for production. This ensures your application is fast and efficient.
Conclusion
Working with Vite in a React project offers a streamlined and efficient development experience. Understanding the flow and structure of key files like index.html
, main.jsx
, and App.jsx
can significantly enhance your development process. With the added benefits of Tailwind CSS integration, HMR, and optimized builds, Vite stands out as a modern, powerful tool for React developers.
By leveraging these features and best practices, you can create high-performance, scalable, and maintainable applications with ease.
Top comments (5)
Well written
Thanks!
What will be the implication of using vite+react+typescript? What's the advantage. Could I output the code into a desktop app using electron js with ES module?
Not sure about electron but vite supports typescript out of the box. It doesn't do type checking but it does transpile them. You can add a vite plugin to do the type checking. Id recommend checking out vites docs!
Thank you for this article. What benefits have to seen with vite compared to CRA?