JS Guide
HomeQuestionsSearchResources
Search

Built for developers preparing for JavaScript, React & TypeScript interviews.

ResourcesQuestionsSupport
HomeQuestionsSearchProgress
HomeQuestionstooling
Next
tooling
mid
bundlers

How does Webpack work and what are its core concepts?

webpack
bundler
loaders
plugins
configuration
Quick Answer

Webpack is a module bundler that builds a dependency graph starting from entry points and bundles modules into output files. Core concepts: Entry (starting point), Output (result), Loaders (transform files), Plugins (extend functionality), and Mode (optimization level).

Detailed Explanation

Core Concepts:

  1. Entry: Starting point(s) for dependency graph
  2. Output: Where to emit bundles
  3. Loaders: Transform non-JS files (CSS, images, TS)
  4. Plugins: Perform wider range of tasks
  5. Mode: development/production optimizations

How It Works:

  1. Start from entry point(s)
  2. Build dependency graph
  3. Transform files with loaders
  4. Apply plugins
  5. Output bundles

Common Loaders:

  • babel-loader: Transpile JS
  • css-loader, style-loader: CSS
  • file-loader: Static files
  • ts-loader: TypeScript

Code Examples

Webpack configuration
// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  // Entry point(s)
  entry: {
    main: './src/index.js',
    admin: './src/admin.js',
  },
  
  // Output configuration
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[contenthash].js',
    clean: true, // Clean dist folder
  },
  
  // Mode: development or production
  mode: 'production',
  
  // Module rules (loaders)
  module: {
    rules: [
      // JavaScript/JSX with Babel
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: 'babel-loader',
      },
      // CSS
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader'],
      },
      // Images
      {
        test: /\.(png|jpg|gif|svg)$/,
        type: 'asset/resource',
      },
    ],
  },
  
  // Plugins
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
    }),
    new MiniCssExtractPlugin({
      filename: '[name].[contenthash].css',
    }),
  ],
};

Resources

Webpack Documentation

docs

Related Questions

What is Vite and why is it faster than traditional bundlers?

junior
bundlers
Next
How do you configure TypeScript for a project?