Webpack Start Server Plugin

4.2.18 · active · verified Sun Apr 19

razzle-start-server-webpack-plugin is a utility designed to automatically start a Node.js server after Webpack completes its build process, primarily for server-side bundles in development. It also integrates seamlessly with Hot Module Reloading (HMR) for server code, eliminating the need for manual server restarts during development. The current stable version is 4.2.18, released as part of the broader Razzle monorepo, indicating its release cadence is tied to Razzle's development lifecycle. Its key differentiators include simplified HMR setup for server code and the ability to pass arguments directly to Node.js or the server script, making debugging easier.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates configuring Webpack to use `StartServerPlugin` for a Node.js server, enabling automatic restarts and Hot Module Replacement during development, including debugging with Node.js inspector.

import path from 'path';
import webpack from 'webpack';
import StartServerPlugin from 'start-server-webpack-plugin';

export default {
  mode: 'development',
  entry: {
    server: [
      'webpack/hot/poll?1000',
      './src/server.js'
    ]
  },
  target: 'node',
  watch: true,
  externals: [
    /^[a-z].*$/ // Don't bundle node_modules
  ],
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      }
    ]
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoEmitOnErrorsPlugin(),
    new StartServerPlugin({
      verbose: true,
      debug: true,
      entryName: 'server',
      nodeArgs: ['--inspect-brk'], // For debugging
      scriptArgs: ['--my-custom-arg'],
      restartable: true,
      once: false
    }),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('development')
    })
  ],
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js',
    libraryTarget: 'commonjs2'
  }
};

// A minimal server example (src/server.js)
// import express from 'express';
// const app = express();
// app.get('/', (req, res) => res.send('Hello HMR!'));
// const port = process.env.PORT || 3000;
// app.listen(port, () => console.log(`Server listening on port ${port}`));
// if (module.hot) {
//   module.hot.accept();
//   module.hot.dispose(() => console.log('Server disposed.'));
// }

view raw JSON →