Vite, a next-generation frontend tooling solution, has rapidly gained prominence for its blazing-fast development server and efficient build process. Unlike traditional bundlers, Vite leverages native ES modules during development, leading to near-instantaneous server starts and hot module replacement (HMR). This article provides a comprehensive guide to installing and setting up Vite for your projects, covering various scenarios and best practices.
Understanding Vite’s Core Concepts
Before diving into the installation process, it’s crucial to grasp the fundamental principles that make Vite so effective. This understanding will not only demystify the installation but also equip you with the knowledge to leverage Vite’s full potential.

Native ES Modules and On-Demand Compilation
Vite’s primary innovation lies in its development server. Instead of bundling your entire application upfront, Vite serves your source code directly to the browser using native ES modules. When you import a module, Vite’s development server intercepts the request, performs a just-in-time compilation using esbuild (for TypeScript, JSX, etc.), and serves the compiled code. This on-demand compilation drastically reduces the initial startup time, especially for large projects.
Hot Module Replacement (HMR)
Complementing its fast startup is Vite’s lightning-fast HMR. When you make changes to your code, Vite updates only the modules that have been affected, without requiring a full page reload. This near-instantaneous feedback loop significantly accelerates the development workflow, allowing you to see the impact of your changes in real-time.
Rollup for Production Builds
While Vite excels in development, it utilizes Rollup for production builds. Rollup is a highly efficient module bundler that generates optimized, smaller bundles for deployment. Vite provides sensible defaults for Rollup, but also allows for extensive customization to fine-tune your build process for various target environments.
Plugin System
Vite boasts a robust and flexible plugin system. Plugins allow you to extend Vite’s functionality, from integrating with specific frameworks (like Vue, React, Preact) to adding custom transformations, asset handling, or build optimizations. The plugin API is designed to be intuitive and powerful, enabling seamless integration with your existing tools and workflows.
Installing Vite: A Step-by-Step Guide
The installation process for Vite is straightforward, thanks to its reliance on Node.js and npm/yarn/pnpm. This section will guide you through the most common installation scenarios.
Prerequisites
Before you begin, ensure you have the following installed on your system:
- Node.js: Vite requires Node.js. It’s recommended to use a recent LTS (Long-Term Support) version. You can download it from the official Node.js website (https://nodejs.org/).
- Package Manager: You’ll need either npm (which comes bundled with Node.js), yarn, or pnpm.
Creating a New Project with Vite
The most common way to start with Vite is by creating a new project using its scaffolding tool. This method ensures you have a well-structured project with Vite pre-configured.
Using npm
Open your terminal or command prompt and run the following command:
npm create vite@latest
This command will initiate an interactive process. You’ll be prompted to:
- Project name: Enter a name for your project (e.g.,
my-vite-app). - Select a framework: Choose from a list of popular frameworks like Vanilla, Vue, React, Preact, Lit, Svelte, or Solid. You can also select options with TypeScript for type safety.
- Select a variant: For frameworks like Vue and React, you might be offered different variants (e.g.,
vuevs.vue-ts).
After making your selections, Vite will create the project directory, install the necessary dependencies, and present you with instructions on how to proceed.
Using yarn
If you prefer yarn, the command is similar:
yarn create vite
This will also launch the interactive scaffolding process.
Using pnpm
For pnpm users, the command is:
pnpm create vite
Again, this will guide you through the project creation process.
Installing Vite in an Existing Project
If you have an existing project and want to migrate it to Vite, you can install Vite as a development dependency. This process will vary depending on your project’s current setup (e.g., if it’s using Webpack, Parcel, or is a plain HTML/JS project).
-
Install Vite as a dev dependency:
Using npm:
npm install vite --save-devUsing yarn:
yarn add vite --devUsing pnpm:
pnpm add vite --save-dev -
Configure Vite:
You’ll need to create avite.config.js(orvite.config.ts) file in the root of your project. This file will contain your Vite configuration. For a basic setup, it might look like this:// vite.config.js import { defineConfig } from 'vite'; export default defineConfig({ // configuration options }); -
Update scripts in
package.json:
Modify yourpackage.jsonto include Vite’s development and build commands:{ "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview" } }

- Adjust your HTML entry point:
Vite typically expects your main HTML file to be in the root directory or apublicfolder. Ensure yourindex.htmlcorrectly links to your application’s entry point (e.g.,main.jsormain.ts). Vite will automatically handle the processing of script tags.
Configuring Vite
Vite’s configuration file (vite.config.js or vite.config.ts) is where you customize its behavior. This file is written using JavaScript or TypeScript and exports an object conforming to Vite’s configuration schema.
Basic Configuration Options
plugins: An array of Vite plugins to use.root: The project root directory. Defaults to the directory containingvite.config.js.base: The public base path when served in production. Defaults to/.publicDir: Directory to serve as static assets. Defaults topublic.cacheDir: Directory to store cached dependency information. Defaults to.vitein the root.resolve: Options for module resolution.alias: Define module aliases.extensions: List of file extensions to be treated as modules.dedupe: Force dependency deduplication.
server: Server-specific options.host: Specify the server hostname.port: Specify the server port.strictPort: Iftrue, the server will exit if the port is already in use.https: Enable HTTPS.proxy: Configure proxying requests.fs: File system related options.allow: Allow serving files from specific directories outside the root.deny: Deny serving files from specific directories.
build: Build-specific options.outDir: Output directory for build. Defaults todist.assetsDir: Directory to output assets withinoutDir. Defaults toassets.rollupOptions: Customize Rollup options.target: The browser target for the build.
Example Configuration
Here’s a more detailed example demonstrating some common configuration options:
// vite.config.js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue'; // Example for Vue.js
export default defineConfig({
plugins: [
vue(), // Register the Vue plugin
],
resolve: {
alias: {
'@': '/src', // Alias '@' to the 'src' directory
},
},
server: {
port: 3000, // Custom port
proxy: {
'/api': {
target: 'http://localhost:8080', // Proxy API requests
changeOrigin: true,
},
},
},
build: {
rollupOptions: {
output: {
// Customize output file names or chunking
// Example: manualChunks
},
},
},
});
Running Vite Development Server and Builds
Once Vite is installed and configured, you can start using its powerful development server and build commands.
Starting the Development Server
Navigate to your project’s root directory in the terminal and run the dev script defined in your package.json:
npm run dev
# or
yarn dev
# or
pnpm dev
Vite will start its development server, and you’ll see output indicating the local and network URLs where your application is accessible. Open one of these URLs in your browser to view your application. Any changes you make to your source files will be reflected almost instantly due to HMR.
Building for Production
When you’re ready to deploy your application, use the build script:
npm run build
# or
yarn build
# or
pnpm build
Vite will use Rollup to bundle your application, optimizing it for production. The output will be placed in the directory specified by build.outDir (defaulting to dist).
Previewing the Production Build
To preview your production build locally before deploying, you can use the preview script:
npm run preview
# or
yarn preview
# or
pnpm preview
This command serves the static files from your build output directory, allowing you to test the final packaged application.
Advanced Installation and Configuration Scenarios
Vite’s flexibility extends to more complex setups. This section covers some advanced topics that might be relevant for specific project needs.
Integrating with Frameworks and Libraries
Vite provides official plugins for popular frameworks like Vue, React, Preact, and Svelte. Installing and configuring these plugins is typically done by selecting them during the project creation process or by adding them manually to your vite.config.js.
For example, to use Vue with Vite:
-
Install the plugin:
npm install @vitejs/plugin-vue --save-dev # or yarn add @vitejs/plugin-vue --dev # or pnpm add @vitejs/plugin-vue --save-dev -
Import and use in
vite.config.js:import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; export default defineConfig({ plugins: [vue()], });
Vite also handles many libraries out-of-the-box, leveraging its dependency pre-bundling capabilities to optimize their loading and usage.
Handling Static Assets
Static assets (images, fonts, etc.) placed in the public directory will be copied directly to the root of your build output. Assets imported from your JavaScript/TypeScript code (e.g., import logoUrl from './logo.png') will be processed by Vite, potentially hashed for cache-busting, and placed in the assets directory within your output.
TypeScript Support
Vite offers excellent TypeScript support. When creating a project with TypeScript, Vite automatically configures the necessary build tooling. For existing projects, you can add TypeScript support by:
-
Installing TypeScript:
npm install typescript --save-dev # or yarn add typescript --dev # or pnpm add typescript --save-dev -
Creating a
tsconfig.jsonfile:
A typicaltsconfig.jsonfor a Vite project might look like this:{ "compilerOptions": { "target": "ESNext", "useDefineForClassFields": true, "module": "ESNext", "moduleResolution": "Node", "strict": true, "jsx": "preserve", "sourceMap": true, "resolveJsonModule": true, "esModuleInterop": true, "lib": ["ESNext", "DOM"], "skipLibCheck": true }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], "exclude": ["node_modules"] }
Vite uses esbuild for fast TypeScript transpilation during development and Rollup with a TypeScript plugin for type checking during builds, ensuring a smooth and efficient TypeScript development experience.

Customizing Rollup Options
For advanced build optimizations, you can leverage build.rollupOptions in your vite.config.js. This allows you to pass configuration directly to Rollup, enabling fine-grained control over bundle splitting, code splitting, asset handling, and more.
// vite.config.js
import { defineConfig } from 'vite';
export default defineConfig({
build: {
rollupOptions: {
output: {
// Example: Customize chunk file names
chunkFileNames: 'assets/chunks/[name]-[hash].js',
entryFileNames: 'assets/entries/[name]-[hash].js',
assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
},
// Example: manualChunks for code splitting
manualChunks(id) {
if (id.includes('node_modules')) {
// vendor chunk
return 'vendor';
}
},
},
},
});
By following these steps and understanding Vite’s core principles, you can effectively install, configure, and leverage this powerful tool to build modern web applications with unparalleled speed and efficiency.
