Skip to main content
Course/Module 11/Topic 1 of 4Advanced

Module Bundlers

Learn to use module bundlers like Webpack and Vite for efficient JavaScript development

75 minโ€ขBy Priygop Teamโ€ขLast updated: Feb 2026

Webpack Configuration

Webpack is a powerful module bundler that transforms and bundles JavaScript modules for the browser.

Basic Webpack Setup

Example
// webpack.config.js
const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babelloader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            }
        ]
    }
};

Vite Configuration

Example
// vite.config.js
import { defineConfig } from 'vite';

export default defineConfig({
    build: {
        outDir: 'dist',
        sourcemap: true
    },
    server: {
        port: 3000,
        open: true
    }
});

Code Splitting

Example
// Dynamic imports for code splitting
import { lazy } from 'react';

const loadModule = async () => {
    const module = await import('./heavy-module.js');
    return module.default;
};

// Webpack code splitting
const HomePage = lazy(() => import('./pages/Home'));
const AboutPage = lazy(() => import('./pages/About'));

Asset Optimization

Example
// webpack.config.js - Asset optimization
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
    optimization: {
        splitChunks: {
            chunks: 'all',
            cacheGroups: {
                vendor: {
                    test: /[\\/]node_modules[\\/]/,
                    name: 'vendors',
                    chunks: 'all'
                }
            }
        }
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: '[name].[contenthash].css'
        })
    ]
};

Mini-Project: Custom Build Tool

Example
// Simple build tool
const fs = require('fs');
const path = require('path');

class SimpleBundler {
    constructor(config) {
        this.config = config;
        this.modules = new Map();
    }

    bundle(entry) {
        const module = this.loadModule(entry);
        return this.generateBundle(module);
    }

    loadModule(filePath) {
        if (this.modules.has(filePath)) {
            return this.modules.get(filePath);
        }

        const content = fs.readFileSync(filePath, 'utf8');
        const module = {
            id: filePath,
            content: this.transformModule(content),
            dependencies: this.extractDependencies(content)
        };

        this.modules.set(filePath, module);

        module.dependencies.forEach(dep => {
            this.loadModule(dep);
        });

        return module;
    }

    transformModule(content) {
        // Simple transformation - replace require with module system
        return content.replace(/require\(['"]([^'"]+)['"]\)/g, (match, dep) => {
            return `__require__('${dep}')`;
        });
    }

    extractDependencies(content) {
        const deps = [];
        const requireRegex = /require\(['"]([^'"]+)['"]\)/g;
        let match;

        while ((match = requireRegex.exec(content)) !== null) {
            deps.push(match[1]);
        }

        return deps;
    }

    generateBundle(entryModule) {
        let bundle = `(function(modules) {
    function __require__(id) {
        const module = { exports: {} };
        modules[id](module, module.exports, __require__);
        return module.exports;
    }
    return __require__('${entryModule.id}');
})({`;

        this.modules.forEach((module, id) => {
            bundle += `'${id}': function(module, exports, require) {
                ${module.content}
            },
`;
        });

        bundle += '});';
        return bundle;
    }
}

๐Ÿ“š Additional Resources

Recommended Reading

  • โ€ข Webpack Documentation
  • โ€ข Vite Guide
  • โ€ข npm Package Management
  • โ€ข Development Workflow Best Practices

Online Resources

  • โ€ข Webpack Academy
  • โ€ข Vite Getting Started
  • โ€ข npm Documentation
  • โ€ข Modern JavaScript Tooling
Chat on WhatsApp
Priygop - Leading Professional Development Platform | Expert Courses & Interview Prep