You can use Webpack, Vite, or Parcel in Replit by installing them via Shell with npm, creating a configuration file, and updating the .replit run and deployment build commands to use the bundler. Vite is the recommended choice for Replit because it starts faster and requires less configuration. For system-level build dependencies, add them to replit.nix.
Configure Webpack, Vite, or Parcel as Your Build Tool in Replit
This tutorial walks you through setting up a JavaScript bundler in Replit for projects that need module bundling, code splitting, or asset optimization. You will learn how to install and configure Webpack, Vite, or Parcel, wire the build tool into your .replit run command, and set up the deployment build step. Vite is the easiest option for Replit since it requires minimal configuration, but this guide covers all three so you can choose based on your project's needs.
Prerequisites
- A Replit account (free Starter plan works for development)
- A Node.js Replit App with JavaScript or TypeScript source files
- Basic familiarity with the Replit Shell tab and file tree
- package.json already initialized (run npm init -y in Shell if not)
Step-by-step guide
Choose and install your build tool
Choose and install your build tool
Open the Shell tab and install your preferred bundler. Vite is recommended for Replit because it starts in under a second and requires almost no configuration. Webpack is the most configurable and widely used in production. Parcel is a zero-config alternative that auto-detects your project structure. Install one of the three options below. Each includes the necessary plugins for a React + TypeScript project.
1# Option 1 — Vite (recommended for Replit):2npm install --save-dev vite @vitejs/plugin-react34# Option 2 — Webpack:5npm install --save-dev webpack webpack-cli webpack-dev-server html-webpack-plugin babel-loader @babel/core @babel/preset-env @babel/preset-react67# Option 3 — Parcel:8npm install --save-dev parcelExpected result: The bundler and its plugins install successfully. Running 'npx vite --version', 'npx webpack --version', or 'npx parcel --version' in Shell confirms the installation.
Create the build tool configuration file
Create the build tool configuration file
Each bundler uses a different configuration file in the project root. Vite uses vite.config.js, Webpack uses webpack.config.js, and Parcel uses your package.json source field. Create the appropriate file for your chosen bundler. The configurations below are set up for a React project with an entry point in src/index.jsx or src/main.jsx and output to the dist directory.
1// vite.config.js — minimal Vite config:2import { defineConfig } from 'vite';3import react from '@vitejs/plugin-react';45export default defineConfig({6 plugins: [react()],7 server: {8 host: '0.0.0.0',9 port: 300010 }11});1213// webpack.config.js — minimal Webpack config:14const path = require('path');15const HtmlWebpackPlugin = require('html-webpack-plugin');1617module.exports = {18 entry: './src/index.jsx',19 output: {20 path: path.resolve(__dirname, 'dist'),21 filename: 'bundle.js'22 },23 module: {24 rules: [25 { test: /\.jsx?$/, exclude: /node_modules/, use: 'babel-loader' }26 ]27 },28 plugins: [new HtmlWebpackPlugin({ template: './public/index.html' })],29 devServer: { host: '0.0.0.0', port: 3000 }30};Expected result: The configuration file is saved in your project root. The bundler can now resolve your source files and output bundled code.
Add build scripts to package.json
Add build scripts to package.json
Open package.json and add scripts for development and production builds. The dev script starts the development server with hot reloading. The build script creates an optimized production bundle in the dist directory. The start script serves the production build. These scripts are what your .replit file will reference.
1{2 "scripts": {3 "dev": "vite",4 "build": "vite build",5 "preview": "vite preview --host 0.0.0.0 --port 3000",6 "start": "vite preview --host 0.0.0.0 --port 3000"7 }8}910// For Webpack:11{12 "scripts": {13 "dev": "webpack serve --mode development",14 "build": "webpack --mode production",15 "start": "npx serve dist -l 3000"16 }17}1819// For Parcel:20{21 "scripts": {22 "dev": "parcel src/index.html --port 3000",23 "build": "parcel build src/index.html --dist-dir dist",24 "start": "npx serve dist -l 3000"25 }26}Expected result: Running 'npm run dev' in Shell starts the development server, and 'npm run build' creates an optimized bundle in the dist directory.
Update the .replit file for development and deployment
Update the .replit file for development and deployment
Open your .replit file (enable Show hidden files if needed) and configure both the development run command and the deployment build/run commands. The run command controls what happens when you press the Run button. The deployment section controls what happens in production. Make sure the ports section maps your dev server port to external port 80.
1# .replit — configured for Vite2entrypoint = "src/main.jsx"3modules = ["nodejs-20:v8-20230920-bd784b9"]45run = "npm run dev"6onBoot = "npm install"78[nix]9channel = "stable-24_05"1011[deployment]12build = ["sh", "-c", "npm install && npm run build"]13run = ["sh", "-c", "npm run start"]14deploymentTarget = "cloudrun"1516[[ports]]17localPort = 300018externalPort = 801920hidden = [".config", "node_modules", "dist"]Expected result: Pressing the Run button starts the dev server with hot reloading. Deploying builds an optimized bundle and serves it in production mode.
Add Nix packages for native build dependencies
Add Nix packages for native build dependencies
Some build tools require system-level dependencies that are not included in Replit's default environment. If you see build errors about missing binaries or native modules, add the required packages to your replit.nix file. Common needs include build-essential tools for native Node.js modules, Python for node-gyp (which some npm packages use during install), and image optimization tools. Search for available packages at search.nixos.org/packages.
1# replit.nix — add system dependencies for build tools2{ pkgs }: {3 deps = [4 pkgs.nodejs-20_x5 pkgs.nodePackages.typescript-language-server6 pkgs.python3 # Required by node-gyp for some native modules7 pkgs.pkg-config # Required by some native build scripts8 ];9}Expected result: Running 'exit' in Shell reloads the environment. The added system packages are available for your build process.
Verify the build output and test locally
Verify the build output and test locally
Run npm run build in the Shell to create the production bundle. Check the dist directory to verify it contains your bundled JavaScript, CSS, and HTML files. Then run npm run start to serve the production build and verify it works in the Preview pane. Compare the production build with your development version to make sure nothing was lost during bundling. Check the Console for any warnings about large bundle sizes or missing assets.
1# Build and verify:2npm run build34# Check the output:5ls -la dist/67# Serve the production build locally:8npm run startExpected result: The dist directory contains optimized bundles. The production build renders correctly in the Preview pane with no console errors.
Complete working example
1// vite.config.js — Complete Vite configuration for a Replit React project2import { defineConfig } from 'vite';3import react from '@vitejs/plugin-react';4import path from 'path';56export default defineConfig({7 plugins: [react()],89 // Development server configuration10 server: {11 host: '0.0.0.0', // Required for Replit Preview12 port: 3000, // Match [[ports]] localPort in .replit13 strictPort: true, // Fail if port is already in use14 hmr: {15 clientPort: 443 // HMR through Replit's HTTPS proxy16 }17 },1819 // Production preview server20 preview: {21 host: '0.0.0.0',22 port: 300023 },2425 // Build configuration26 build: {27 outDir: 'dist',28 sourcemap: false, // Disable sourcemaps in production29 minify: 'terser', // Minify output for smaller bundles30 rollupOptions: {31 output: {32 manualChunks: {33 vendor: ['react', 'react-dom'] // Separate vendor bundle34 }35 }36 }37 },3839 // Path aliases40 resolve: {41 alias: {42 '@': path.resolve(__dirname, 'src')43 }44 }45});Common mistakes when using Webpack or similar tools in Replit
Why it's a problem: Dev server binds to localhost instead of 0.0.0.0, causing the Preview pane to show a blank page
How to avoid: Add host: '0.0.0.0' to your vite.config.js server section or --host 0.0.0.0 flag to your dev script.
Why it's a problem: Using the development server (npm run dev) as the deployment run command
How to avoid: The deployment run command should serve the production build: npm run start or npx serve dist. Development mode includes hot reloading overhead and debug code.
Why it's a problem: Build fails with 'Cannot find module' errors because dependencies are in devDependencies
How to avoid: In Replit deployments, only production dependencies are installed by default. Move build tools to dependencies or add npm install --include=dev to your build command.
Why it's a problem: Not setting the port correctly in both the config file and .replit [[ports]] section
How to avoid: Make sure your dev server port matches the localPort in .replit. If your server runs on port 3000, set localPort = 3000 and externalPort = 80.
Best practices
- Use Vite as your default build tool in Replit — it starts faster and requires less configuration than Webpack
- Always set host: '0.0.0.0' in your dev server config so the Replit Preview pane can access it
- Keep development and production run commands separate — dev mode should never run in production
- Add dist/ and build/ directories to your .gitignore and .replit hidden files
- Use code splitting to keep bundle sizes small — separate vendor libraries from application code
- Run npm run build in Shell before deploying to catch build errors early
- Add system dependencies to replit.nix if native modules fail during npm install
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I have a React project on Replit and want to set up Vite as the build tool. How do I install Vite, create a vite.config.js with the right settings for Replit (0.0.0.0 host, correct port), and configure .replit for both development and production?
Set up Vite for this React project. Install vite and @vitejs/plugin-react, create a vite.config.js with host 0.0.0.0 and port 3000, add dev/build/start scripts to package.json, and update the .replit file with the correct run and deployment commands.
Frequently asked questions
Vite is recommended for most Replit projects. It starts in under a second, requires minimal configuration, and handles React, TypeScript, and CSS out of the box. Use Webpack only if you need advanced features like custom loaders or module federation.
Your dev server is binding to localhost instead of 0.0.0.0. Add host: '0.0.0.0' to your vite.config.js server section or pass --host 0.0.0.0 in your npm script.
Yes. Vite handles TypeScript natively with no extra configuration. Webpack needs ts-loader or babel with @babel/preset-typescript. Parcel handles TypeScript automatically.
Yes. Ask Agent: 'Set up Vite with React and TypeScript for this project. Configure the dev server on port 3000 with host 0.0.0.0 and update the .replit file for development and deployment.' Agent v4 will handle the full setup.
Some npm packages require system-level build tools. Add pkgs.python3 and pkgs.pkg-config to your replit.nix file, then run 'exit' in Shell to reload the environment and retry npm install.
Vite enables HMR automatically. For Replit's HTTPS proxy, add hmr: { clientPort: 443 } to your vite.config.js server section. Webpack requires webpack-dev-server with hot: true in the devServer config.
Replit supports any bundler that runs on Node.js. Install it via npm, configure it, and update your .replit run command. However, Vite is the most tested and reliable option in Replit's environment.
For projects that need multi-stage builds, custom asset pipelines, or integration with external build services, the RapidDev engineering team can design a build system tailored to your project's complexity.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation