Understanding Webpack Hot Module Replacement (HMR): Mechanism and Implementation

This article explains how Webpack's Hot Module Replacement works, covering its benefits, the build and watch processes, the role of webpack-dev-middleware and webpack-hot-middleware, and provides detailed code examples to illustrate the communication between the server and the browser.

政采云技术
政采云技术
政采云技术
Understanding Webpack Hot Module Replacement (HMR): Mechanism and Implementation

Webpack Hot Module Replacement (HMR) is a built‑in feature that updates changed modules in the browser without a full page reload, preserving application state and speeding up development.

The main advantages of HMR are state preservation, faster incremental updates, and instant visual feedback for CSS/JS changes.

In a typical Vue project the HMR workflow relies on a stack of webpack, webpack-dev-middleware, webpack-hot-middleware and an Express server, which together compile, serve from memory, and push updates to the client.

When the project starts, Webpack performs an initial compilation and outputs a hash (e.g., 3606e1ab1ddcf6626797). After each code change the console shows a new hash, a .hot-update.json manifest, and a .hot-update.js file containing the changed modules.

Webpack’s watch mode keeps the compiler running; it monitors file changes, triggers a recompilation, and then continues watching.

The dev middleware serves compiled assets from an in‑memory filesystem ( memory-fs), so no files are written to disk. Example configuration:

const webpack = require('webpack');
const webpackConfig = require('./webpack.dev.conf');
const compiler = webpack(webpackConfig);
const devMiddleware = require('webpack-dev-middleware')(compiler, {
  // self‑define options
});

The hot middleware creates a communication channel between the browser and the server using Server‑Sent Events. It injects a client script ( webpack-hot-middleware/client.js) that opens an EventSource to /__Webpack_hmr and listens for messages.

var options = {
  path: '/__Webpack_hmr',
  timeout: 20 * 1000,
  overlay: true,
  reload: false,
  log: true,
  warn: true,
  name: '',
  autoConnect: true,
  overlayStyles: {},
  overlayWarnings: false,
  ansiColors: {}
};

The client registers listeners and processes incoming JSON messages. A simplified handler looks like:

function processMessage(obj) {
  switch (obj.action) {
    case 'building':
      // rebuilding
      break;
    case 'built':
      // rebuilt in n ms
    case 'sync':
      var applyUpdate = true;
      if (applyUpdate) {
        processUpdate(obj.hash, obj.modules, options);
      }
      break;
    default:
      // other actions
  }
}

During a hot update, the client requests /hash.hot-update.json to obtain the list of changed files, then loads each fileChunk.hash.hot-update.js via a dynamically inserted <script> tag. The runtime defines webpackHotUpdate which iterates over the new modules and applies them without reloading the page.

In summary, HMR works by establishing a persistent SSE connection, detecting changes, delivering a manifest, fetching updated chunks, and applying them through the runtime, resulting in rapid, state‑preserving development cycles.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

JavaScriptfrontend developmentwebpackHot Module Replacementhmrdev middlewareWebpack-hot-middleware
政采云技术
Written by

政采云技术

ZCY Technology Team (Zero), based in Hangzhou, is a growth-oriented team passionate about technology and craftsmanship. With around 500 members, we are building comprehensive engineering, project management, and talent development systems. We are committed to innovation and creating a cloud service ecosystem for government and enterprise procurement. We look forward to your joining us.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.