Hot Reload: het omstart och hur det snabbar upp utvecklingen

Författare: IT Sectr Publicerad: 2026-07-03 Lästid: 10 min

Hot Reload — är en teknik där ändringar i källkoden tillämpas på en körande applikation utan att sidan laddas om helt och utan förlust av aktuellt tillstånd. Till skillnad från Live Reload, som helt enkelt uppdaterar hela sidan, ersätter het omstart endast de ändrade modulerna i farten. Enligt Webpack, 2024 minskar Hot Module Replacement (HMR) utvecklingscykeltiden med upp till 80% genom att bevara komponenternas tillstånd.

Huvudpunkter

  • Hot Reload — teknik för omedelbar tillämpning av kodändringar utan omstart av applikation och förlust av tillstånd.
  • Tillstånd för komponenten bevaras vid het omstart — formulärdata, scrollning, öppna modala fönster.
  • HMR (Hot Module Replacement) — implementering av Hot Reload i Webpack, Vite och andra bundlare.
  • React Fast Refresh — officiell implementering för React som stöder funktionella komponenter och hooks.
  • Produktivitet i utvecklingen ökar genom minskad tid mellan kodändring och resultatvisning.

Vad är Hot Reload?

Hot Reload — är en utvecklingsmekanism där ändringar i källfiler omedelbart reflekteras i den körande applikationen utan omstart. Utvecklaren redigerar kod i editorn, sparar filen och resultatet syns direkt i webbläsaren eller emulatorn.

Den viktigaste egenskapen hos tekniken är bevarandet av applikationens tillstånd. Variabler i minnet, data i formulär, aktuell navigering — allt förblir på sin plats. Utvecklaren behöver inte upprepa sekvensen av åtgärder för att återvända till önskad skärm.

I webbutveckling implementeras Hot Reload genom mekanismen Hot Module Replacement (HMR). Bundlaren övervakar filändringar, avgör vilka moduler som påverkas och skickar den uppdaterade koden till webbläsaren via WebSocket. Webbläsaren ersätter endast dessa moduler utan att ladda om sidan.

Populariteten för Hot Reload ökade med spridningen av ensidiga applikationer (SPA), där full omstart av sidan förstör hela klientapplikationens tillstånd. React, Vue, Angular och andra ramverk rekommenderar HMR som primärt utvecklingsläge.

Hur fungerar HMR inuti bundlaren

HMR-mekanismen består av fyra steg. Bundlaren på serskidan kompilerar den ändrade modulen, skapar en JSON-lapp med den nya kodversionen och skickar den till webbläsaren via WebSocket-anslutning. Webbläsardelen av HMR runtime tar emot lappen, ersätter den gamla modulen med den nya och meddelar modulens prenumeranter.

Kompilerings- och sändningssteget

Webpack Dev Server använder WebSocket för kommunikation med klienten. Vid filändring skapar bundlaren hot-update.js och hot-update.json med en manifest av ändringar. Klienten laddar automatiskt dessa filer via JSONP.

js
// webpack.config.js - HMR-installation
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode: 'development',
  devServer: {
    hot: true,
    liveReload: false
  },
  plugins: [new HtmlWebpackPlugin()]
};

Tillämpning av modulen på klienten

HMR runtime i webbläsaren kontrollerar om den ersatta modulen stöder accept. Om modulen har deklarerat module.hot.accept(), ersätter runtime den på plats och kör uppdateringscallbacken. Om accept inte har deklarerats, faller HMR till en högre nivå, till den överordnade modulen.

I React Fast Refresh är denna logik inbyggd på ramverksnivå — det finns inget behov av att manuellt skriva module.hot.accept i varje fil. Babel-plugin react-refresh/babel lägger till kod som säkert ersätter komponenter utan tillståndsförlust.

Skillnad mellan Hot Reload, Live Reload och Full Reload

Dessa tre termer blandas ofta ihop, men skiljer sig radikalt i beteende. Live Reload laddar om hela sidan vid varje ändring — allt tillstånd går förlorat. Full Reload inträffar vid full omstart av utvecklingsservern med förlust av inte bara klientens tillstånd utan även serverns tillstånd.

TypOmladdning av sidaBevarande av tillståndHastighet
Hot Reload (HMR)NejJaOmedelbart
Live ReloadJaNej1-3 sek
Full ReloadJaNej3-10 sek

Valet mellan Hot och Live påverkar direkt utvecklingshastigheten. Vid HMR tar cykeln ”ändrade koden → såg resultatet” 50-200 ms. Vid Live Reload — 1-3 sekunder plus tid för kontextåterställning. Under en arbetsdag innebär skillnaden tiotals minuter sparad tid.

React Fast Refresh: funktioner för React

React Fast Refresh — den officiella implementeringen av Hot Reload optimerad för React-komponenter. Den ersatte den gamla mekanismen React Hot Loader, som var instabil och krävde manuell konfiguration. Fast Refresh är inbyggt i Create React App, Next.js, Vite och Webpack via react-refresh/babel.

Stöd för funktionella komponenter

Fast Refresh bevarar korrekt tillståndet för funktionella komponenter när deras kod ändras. Om du endast ändrar JSX-markup — useState och andra hooks behåller sina värden. Om hookens logik ändras — sker ommontering av komponenten.

js
// Exempel - tillstånd bevaras när JSX ändras
import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+</button>
    </div>
  );
}

Regler för säker ersättning

Fast Refresh bevarar inte tillståndet om den nya koden innehåller kompileringsfel. Om komponenten inte exporteras som standard (named export), kan tillståndet också gå förlorat. Det rekommenderas att använda default export för komponenter och slå in exporter i memo om tillståndsbevarande behöver garanteras.

Byggverktyg med HMR-stöd

Moderna bundlare erbjuder HMR. Webpack — pionjär inom HMR med flexibel konfiguration via devServer.hot. Vite använder inbyggd ESM och esbuild för omedelbar HMR utan bundling. Parcel — HMR utan konfiguration. Turbopack — den nya bundlaren från Vercel med HMR på Rust.

VerktygHMR-typKonfigurationEkosystem
Webpack 5HMR via WebSocketdevServer.hot: trueReact, Vue, Angular
ViteNative ESM HMRDirekt ur lådanReact, Vue, Svelte
Parcel 2Zero-config HMRKrävs inteReact, Vue, TS
TurbopackIncremental HMRDirekt ur lådanNext.js

Vite utmärker sig i hastighet — HMR i Vite fungerar via webbläsarens inbyggda ES-moduler. Vid filändring skickar Vite endast den modulen via import(), utan att kompilera om hela projektet. Webpack kompilerar varje modul i sin helhet, vilket saktar ner HMR i stora projekt.

Exempel på HMR-konfiguration i projekt

Låt oss titta på HMR-konfiguration för olika bundlare. I Webpack måste du ställa in hot: true i devServer och lägga till react-refresh/babel. I Vite fungerar HMR direkt ur lådan med vilket preset som helst. I Next.js är Fast Refresh aktiverat som standard via turbokompilatorn.

Vite med React

js
// vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: {
    hmr: {
      port: 3001
    }
  }
});

Webpack 5 med Fast Refresh

js
// webpack.config.js
const ReactRefreshWebpackPlugin =
  require('@pmmmwh/react-refresh-webpack-plugin');

module.exports = {
  mode: 'development',
  devServer: { hot: true },
  plugins: [new ReactRefreshWebpackPlugin()],
  module: {
    rules: [
      {
        test: /\.jsx?$/u,
        use: 'babel-loader'
      }
    ]
  }
};

Begränsningar och problem med het omstart

HMR fungerar inte korrekt i alla scenarier. CSS-moduler med dynamiska klasser kan eventuellt inte tillämpas. Globala variabler och singletons (Redux store, router) kan återställas vid omstart. Tunga bibliotek vid HMR genererar ibland minnesläckor på grund av modulbyte utan GC.

Lösningen på HMR-problem — isolera het kod i rena komponenter utan biverkningar. Biverkningar (WebSocket-prenumerationer, timers) bör rensas i useEffect. För Redux rekommenderas en persister som sparar tillstånd i sessionStorage. CSS-lösningar som CSS Modules eller styled-components fungerar korrekt med HMR utan extra konfiguration.

En annan begränsning — felsökning i produktion: HMR är avsiktligt avaktiverat i produktionsbyggen. Källkoden är minifierad och het ersättning i produktion är omöjlig. För felsökning av fel i produktion används source maps och loggning, men inte HMR.

Vanliga frågor

Hur skiljer sig Hot Reload från Live Reload?

Hot Reload ersätter endast den ändrade modulen utan att ladda om sidan och bevarar tillståndet. Live Reload laddar om hela sidan — tillståndet går förlorat, applikationen startar om från början.

Hur aktiverar man Hot Reload i React?

I projekt på Create React App och Vite är HMR aktiverat som standard. I Webpack måste du lägga till devServer: { hot: true } och @pmmmwh/react-refresh-webpack-plugin. I Next.js fungerar Fast Refresh utan konfiguration.

Varför bevarar Hot Reload inte komponentens tillstånd?

Orsaken är kompileringsfel i den nya koden, named export istället för default, ändring av hook-signatur eller direkt mutation av tillstånd. React Fast Refresh återställer komponenten endast när det är nödvändigt för korrekt funktion.

Fungerar Hot Reload med TypeScript?

Ja, alla moderna bundlare stöder HMR med TypeScript. Vite använder esbuild för TS-transpilering. Webpack — ts-loader eller babel med @babel/preset-typescript. Fast Refresh fungerar korrekt med typade komponenter.

Hur felsöker man problemet när HMR inte uppdaterar ändringar?

Kontrollera webbläsarkonsolen för WebSocket-anslutningsfel. Säkerställ att devServer.hot: true är aktiverat. För Vite, kontrollera HMR-porten. Om problemet inte löser sig — utför en fullständig omladdning av sidan (F5) och kontrollera bundlarkonsolen.

Sammanfattning

  • Hot Reload — teknik för het ersättning av kod utan omstart och tillståndsförlust, grunden för modern SPA-utveckling.
  • HMR implementeras via WebSocket-modulpatches och ersätter endast ändrade filer utan full omkompilering.
  • React Fast Refresh — officiell HMR-implementering för React med stöd för hooks och funktionella komponenter.
  • Vite, Webpack och Parcel erbjuder HMR direkt ur lådan; Vite leder i hastighet tack vare inbyggt ESM.
  • Hot Reload bevarar tillståndet endast om modulen deklarerar accept eller Fast Refresh med default export används.
  • Kompileringsfel och named export utan memo kan återställa tillstånd vid het ersättning.
  • För Redux och globala tillstånd rekommenderas en persister som sparar data i sessionStorage vid HMR.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också