elm-hot-webpack-loader

raw JSON →
1.1.8 verified Sat Apr 25 auth: no javascript

Webpack loader that enables hot module replacement (HMR) for Elm 0.19 applications, preserving application state across code changes during development. Current stable version is 1.1.8, released on a maintenance cadence. Requires elm-webpack-loader ^7.0.1 as a peer dependency. Unlike alternatives (e.g., elm-hot without Webpack), it integrates seamlessly into existing Webpack setups, requiring only a single loader addition. Does not support Elm 0.18.

error Module not found: Error: Can't resolve 'elm-hot-webpack-loader'
cause The package is not installed or not in node_modules.
fix
npm install --save-dev elm-hot-webpack-loader
error Error: You must run webpack-dev-server with --hot flag
cause Hot module replacement is not enabled.
fix
Add --hot to webpack-dev-server command or set devServer.hot: true in webpack config.
error Uncaught TypeError: Cannot read properties of null (reading 'register')
cause elm-hot-webpack-loader must be placed before elm-webpack-loader in the webpack config.
fix
Swap the loader order so that elm-hot-webpack-loader is first.
deprecated Elm 0.18 is not supported. Use fluxxu/elm-hot-loader@0.5.x instead.
fix Use elm-hot-loader@0.5.x for Elm 0.18 projects.
gotcha The loader order is critical: elm-hot-webpack-loader must appear before elm-webpack-loader in the use array.
fix Swap loader order so that elm-hot-webpack-loader is first.
gotcha webpack-dev-server --hot flag is required for older versions; newer versions may enable HMR by default.
fix Use CLI flag --hot or set devServer.hot: true in config.
npm install elm-hot-webpack-loader
yarn add elm-hot-webpack-loader
pnpm add elm-hot-webpack-loader

Demonstrates correct Webpack configuration using elm-hot-webpack-loader before elm-webpack-loader, with hot module replacement enabled in devServer.

// webpack.config.js
module.exports = {
  mode: 'development',
  module: {
    rules: [
      {
        test: /\.elm$/,
        exclude: [/elm-stuff/, /node_modules/],
        use: [
          { loader: 'elm-hot-webpack-loader' },
          {
            loader: 'elm-webpack-loader',
            options: {
              cwd: __dirname
            }
          }
        ]
      }
    ]
  },
  devServer: {
    static: './dist',
    hot: true
  }
};

// Main.elm (basic Elm app)
module Main exposing (main)
import Browser
main = Browser.sandbox { init = 0, update = \\_ model -> model, view = \\_ -> Html.text "Hello" }