Convert Figma logo to code with AI

webpack logowebpack-dev-server

Serves a webpack app. Updates the browser on changes. Documentation https://webpack.js.org/configuration/dev-server/.

7,797
1,430
7,797
34

Top Related Projects

Set up a modern web app by running one command.

43,380

The zero configuration build tool for the web. 📦🚀

67,112

Next generation frontend tooling. It's fast!

124,777

The React Framework

54,014

The Intuitive Vue Framework.

19,480

ESM-powered frontend build tool. Instant, lightweight, unbundled development. ✌️

Quick Overview

Webpack Dev Server is a development server that provides live reloading functionality for webpack applications. It serves the files from memory and automatically updates the browser when changes are detected, making it an essential tool for developers working on webpack-based projects.

Pros

  • Live reloading: Automatically refreshes the browser when changes are made to the source code
  • Hot Module Replacement (HMR): Allows updating modules in the browser without a full page reload
  • Configurable: Offers extensive configuration options to customize the development environment
  • Integration with webpack: Seamlessly works with webpack's ecosystem and plugins

Cons

  • Learning curve: Can be complex to set up and configure for beginners
  • Performance overhead: May slow down the development process for large projects
  • Limited production use: Primarily designed for development environments, not suitable for production deployments
  • Dependency on webpack: Requires webpack as a core dependency, which may not be ideal for all projects

Code Examples

  1. Basic configuration:
const path = require('path');

module.exports = {
  devServer: {
    static: {
      directory: path.join(__dirname, 'public'),
    },
    compress: true,
    port: 9000,
  },
};

This example sets up a basic dev server configuration, serving static files from the 'public' directory, enabling compression, and setting the port to 9000.

  1. Enabling Hot Module Replacement:
module.exports = {
  devServer: {
    hot: true,
  },
};

This configuration enables Hot Module Replacement, allowing for module updates without a full page reload.

  1. Proxying API requests:
module.exports = {
  devServer: {
    proxy: {
      '/api': 'http://localhost:3000',
    },
  },
};

This example sets up a proxy for API requests, forwarding requests starting with '/api' to a backend server running on localhost:3000.

Getting Started

To get started with webpack-dev-server:

  1. Install the necessary packages:

    npm install webpack webpack-cli webpack-dev-server --save-dev
    
  2. Add a script to your package.json:

    "scripts": {
      "start": "webpack serve --open"
    }
    
  3. Create a basic webpack configuration file (webpack.config.js):

    const path = require('path');
    
    module.exports = {
      mode: 'development',
      entry: './src/index.js',
      output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'dist'),
      },
      devServer: {
        static: {
          directory: path.join(__dirname, 'dist'),
        },
        compress: true,
        port: 8080,
      },
    };
    
  4. Run the dev server:

    npm start
    

This will start the webpack-dev-server and open your default browser to the served application.

Competitor Comparisons

Set up a modern web app by running one command.

Pros of Create React App

  • Provides a complete, opinionated setup for React projects out of the box
  • Abstracts away complex configuration, allowing developers to focus on writing code
  • Includes built-in optimizations and best practices for production builds

Cons of Create React App

  • Less flexibility in configuration compared to webpack-dev-server
  • May include unnecessary dependencies for simpler projects
  • Updating to newer versions can be challenging due to potential breaking changes

Code Comparison

Create React App:

npx create-react-app my-app
cd my-app
npm start

webpack-dev-server:

const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const config = require('./webpack.config.js');

const server = new WebpackDevServer(webpack(config), {
  // ... configuration options
});

server.listen(8080, 'localhost', () => {
  console.log('Dev server listening on port 8080');
});

Create React App provides a simpler setup process, while webpack-dev-server offers more granular control over the development environment. The choice between the two depends on project requirements and developer preferences.

43,380

The zero configuration build tool for the web. 📦🚀

Pros of Parcel

  • Zero configuration required for most projects, making it easier to set up and use
  • Faster build times due to its multi-core processing and caching mechanisms
  • Built-in support for various file types and assets without additional plugins

Cons of Parcel

  • Less flexibility and customization options compared to webpack-dev-server
  • Smaller ecosystem and community support
  • May struggle with more complex project configurations

Code Comparison

webpack-dev-server configuration:

module.exports = {
  devServer: {
    contentBase: './dist',
    hot: true,
    port: 8080
  }
};

Parcel (no configuration required):

parcel index.html

Key Differences

  • webpack-dev-server requires explicit configuration, while Parcel works out of the box
  • webpack-dev-server offers more granular control over the development environment
  • Parcel automatically handles most common scenarios without additional setup

Use Cases

  • webpack-dev-server: Large-scale applications with complex build requirements
  • Parcel: Smaller projects or rapid prototyping where quick setup is prioritized

Community and Ecosystem

  • webpack-dev-server has a larger community and more extensive plugin ecosystem
  • Parcel has a growing community but fewer third-party integrations available

Performance

  • Parcel generally offers faster initial build times
  • webpack-dev-server may have better long-term performance for larger projects
67,112

Next generation frontend tooling. It's fast!

Pros of Vite

  • Significantly faster build and reload times due to native ES modules
  • No bundling required in development, leading to quicker startup
  • Simpler configuration and easier to set up for new projects

Cons of Vite

  • Less mature ecosystem and plugin availability compared to webpack
  • May require additional configuration for older browsers or non-ESM dependencies
  • Limited support for certain advanced webpack features

Code Comparison

webpack-dev-server configuration:

module.exports = {
  devServer: {
    contentBase: './dist',
    hot: true,
    port: 8080
  }
};

Vite configuration:

export default {
  server: {
    port: 3000,
    open: true
  }
};

Both webpack-dev-server and Vite are popular development servers for modern web applications. Webpack-dev-server has been the go-to choice for many years, offering a robust ecosystem and extensive plugin support. Vite, on the other hand, is a newer entrant that focuses on speed and simplicity.

Vite leverages native ES modules, resulting in faster build times and near-instantaneous hot module replacement. It requires minimal configuration and is particularly well-suited for modern JavaScript frameworks. However, its ecosystem is less mature, and it may require additional setup for older browsers or complex build scenarios.

Webpack-dev-server, while generally slower, offers more flexibility and a wider range of features. It has better support for older browsers and non-ESM dependencies out of the box. The choice between the two often depends on project requirements, team familiarity, and performance needs.

124,777

The React Framework

Pros of Next.js

  • Provides a complete framework for React applications, including routing, server-side rendering, and API routes
  • Offers automatic code splitting and optimized performance out of the box
  • Supports static site generation and incremental static regeneration

Cons of Next.js

  • Steeper learning curve due to its opinionated structure and additional concepts
  • Less flexibility in configuration compared to webpack-dev-server
  • May be overkill for simple single-page applications

Code Comparison

Next.js:

// pages/index.js
export default function Home() {
  return <h1>Welcome to Next.js!</h1>
}

webpack-dev-server:

// webpack.config.js
module.exports = {
  devServer: {
    contentBase: './dist',
    hot: true
  }
};

Next.js provides a more streamlined development experience with its file-based routing system and built-in server-side rendering capabilities. webpack-dev-server, on the other hand, offers greater flexibility and customization options for development environments but requires more manual configuration.

While Next.js is better suited for large-scale React applications with complex routing and server-side rendering needs, webpack-dev-server is ideal for developers who want fine-grained control over their build process and development setup.

54,014

The Intuitive Vue Framework.

Pros of Nuxt

  • Full-featured framework with built-in routing, state management, and server-side rendering
  • Automatic code splitting and optimized performance out of the box
  • Extensive ecosystem with plugins and modules for easy feature integration

Cons of Nuxt

  • Steeper learning curve for developers new to Vue.js or SSR concepts
  • Less flexibility in configuration compared to webpack-dev-server's customization options
  • Potentially larger bundle size due to included features, even if not all are used

Code Comparison

Nuxt configuration:

export default {
  modules: ['@nuxtjs/axios'],
  build: {
    transpile: ['vue-echarts', 'resize-detector']
  }
}

webpack-dev-server configuration:

module.exports = {
  devServer: {
    contentBase: './dist',
    hot: true,
    proxy: {
      '/api': 'http://localhost:3000'
    }
  }
}

Key Differences

  • Nuxt provides a higher-level abstraction, focusing on rapid development of Vue.js applications
  • webpack-dev-server offers more granular control over the development environment
  • Nuxt includes server-side rendering capabilities, while webpack-dev-server is primarily for client-side development
  • Nuxt has a more opinionated structure, whereas webpack-dev-server allows for more flexible project organization
19,480

ESM-powered frontend build tool. Instant, lightweight, unbundled development. ✌️

Pros of Snowpack

  • Faster development builds due to unbundled development
  • Simpler configuration and setup process
  • Built-in support for modern web technologies like ES modules

Cons of Snowpack

  • Less mature ecosystem and community support
  • May require additional plugins for certain features
  • Potential compatibility issues with older browsers in production

Code Comparison

Snowpack configuration:

// snowpack.config.js
module.exports = {
  mount: {
    public: '/',
    src: '/dist',
  },
};

webpack-dev-server configuration:

// webpack.config.js
module.exports = {
  devServer: {
    contentBase: './dist',
    hot: true,
  },
};

Both Snowpack and webpack-dev-server are popular development server solutions for modern web applications. Snowpack focuses on leveraging native ES modules for faster development builds and a simpler configuration process. It excels in projects using modern web technologies but may require additional setup for older browser support.

webpack-dev-server, part of the webpack ecosystem, offers a more mature and battle-tested solution with extensive plugin support and broader compatibility. However, it can be more complex to configure and may have slower build times for larger projects.

The choice between the two depends on project requirements, team familiarity, and specific use cases. Snowpack is ideal for modern, fast-paced development, while webpack-dev-server provides a robust solution for a wide range of project types and configurations.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

npm node tests coverage discussion downloads contributors

webpack-dev-server

Use webpack with a development server that provides live reloading. This should be used for development only.

It uses webpack-dev-middleware under the hood, which provides fast in-memory access to the webpack assets.

Table of Contents

Getting Started

First things first, install the module:

npm install webpack-dev-server --save-dev

or

yarn add -D webpack-dev-server

or

pnpm add -D webpack-dev-server

Note: While you can install and run webpack-dev-server globally, we recommend installing it locally. webpack-dev-server will always use a local installation over a global one.

Usage

There are two main, recommended methods of using the module:

With the CLI

The easiest way to use it is with the webpack CLI. In the directory where your webpack.config.js is, run:

npx webpack serve

Following options are available with webpack serve:

Usage: webpack serve|server|s [entries...] [options]

Run the webpack dev server.

Options:
  -c, --config <value...>                             Provide path to a webpack configuration file e.g. ./webpack.config.js.
  --config-name <value...>                            Name of the configuration to use.
  -m, --merge                                         Merge two or more configurations using 'webpack-merge'.
  --disable-interpret                                 Disable interpret for loading the config file.
  --env <value...>                                    Environment passed to the configuration when it is a function.
  --node-env <value>                                  Sets process.env.NODE_ENV to the specified value.
  --define-process-env-node-env <value>               Sets process.env.NODE_ENV to the specified value. (Currently an alias for `--node-env`)
  --analyze                                           It invokes webpack-bundle-analyzer plugin to get bundle information.
  --progress [value]                                  Print compilation progress during build.
  -j, --json [value]                                  Prints result as JSON or store it in a file.
  --fail-on-warnings                                  Stop webpack-cli process with non-zero exit code on warnings from webpack
  -d, --devtool <value>                               A developer tool to enhance debugging (false | eval | [inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map).
  --no-devtool                                        Negative 'devtool' option.
  --entry <value...>                                  A module that is loaded upon startup. Only the last one is exported.
  --mode <value>                                      Enable production optimizations or development hints.
  --name <value>                                      Name of the configuration. Used when loading multiple configurations.
  -o, --output-path <value>                           The output directory as **absolute path** (required).
  --stats [value]                                     Stats options object or preset name.
  --no-stats                                          Negative 'stats' option.
  -t, --target <value...>                             Environment to build for. Environment to build for. An array of environments to build for all of them when possible.
  --no-target                                         Negative 'target' option.
  --watch-options-stdin                               Stop watching when stdin stream has ended.
  --no-watch-options-stdin                            Negative 'watch-options-stdin' option.
  --allowed-hosts <value...>                          Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').
  --allowed-hosts-reset                               Clear all items provided in 'allowedHosts' configuration. Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').
  --bonjour                                           Allows to broadcasts dev server via ZeroConf networking on start.
  --no-bonjour                                        Disallows to broadcasts dev server via ZeroConf networking on start.
  --no-client                                         Disables client script.
  --client-logging <value>                            Allows to set log level in the browser.
  --client-overlay                                    Enables a full-screen overlay in the browser when there are compiler errors or warnings.
  --no-client-overlay                                 Disables the full-screen overlay in the browser when there are compiler errors or warnings.
  --client-overlay-errors                             Enables a full-screen overlay in the browser when there are compiler errors.
  --no-client-overlay-errors                          Disables the full-screen overlay in the browser when there are compiler errors.
  --client-overlay-warnings                           Enables a full-screen overlay in the browser when there are compiler warnings.
  --no-client-overlay-warnings                        Disables the full-screen overlay in the browser when there are compiler warnings.
  --client-overlay-runtime-errors                     Enables a full-screen overlay in the browser when there are uncaught runtime errors.
  --no-client-overlay-runtime-errors                  Disables the full-screen overlay in the browser when there are uncaught runtime errors.
  --client-overlay-trusted-types-policy-name <value>  The name of a Trusted Types policy for the overlay. Defaults to 'webpack-dev-server#overlay'.
  --client-progress                                   Prints compilation progress in percentage in the browser.
  --no-client-progress                                Does not print compilation progress in percentage in the browser.
  --client-reconnect [value]                          Tells dev-server the number of times it should try to reconnect the client.
  --no-client-reconnect                               Tells dev-server to not to try to reconnect the client.
  --client-web-socket-transport <value>               Allows to set custom web socket transport to communicate with dev server.
  --client-web-socket-url <value>                     Allows to specify URL to web socket server (useful when you're proxying dev server and client script does not always know where to connect to).
  --client-web-socket-url-hostname <value>            Tells clients connected to devServer to use the provided hostname.
  --client-web-socket-url-pathname <value>            Tells clients connected to devServer to use the provided path to connect.
  --client-web-socket-url-password <value>            Tells clients connected to devServer to use the provided password to authenticate.
  --client-web-socket-url-port <value>                Tells clients connected to devServer to use the provided port.
  --client-web-socket-url-protocol <value>            Tells clients connected to devServer to use the provided protocol.
  --client-web-socket-url-username <value>            Tells clients connected to devServer to use the provided username to authenticate.
  --compress                                          Enables gzip compression for everything served.
  --no-compress                                       Disables gzip compression for everything served.
  --history-api-fallback                              Allows to proxy requests through a specified index page (by default 'index.html'), useful for Single Page Applications that utilise the HTML5 History API.
  --no-history-api-fallback                           Disallows to proxy requests through a specified index page.
  --host <value>                                      Allows to specify a hostname to use.
  --hot [value]                                       Enables Hot Module Replacement.
  --no-hot                                            Disables Hot Module Replacement.
  --ipc [value]                                       Listen to a unix socket.
  --live-reload                                       Enables reload/refresh the page(s) when file changes are detected (enabled by default).
  --no-live-reload                                    Disables reload/refresh the page(s) when file changes are detected (enabled by default).
  --open [value...]                                   Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).
  --no-open                                           Does not open the default browser.
  --open-target <value...>                            Opens specified page in browser.
  --open-app-name <value...>                          Open specified browser.
  --open-reset                                        Clear all items provided in 'open' configuration. Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).
  --open-target-reset                                 Clear all items provided in 'open.target' configuration. Opens specified page in browser.
  --open-app-name-reset                               Clear all items provided in 'open.app.name' configuration. Open specified browser.
  --port <value>                                      Allows to specify a port to use.
  --server-type <value>                               Allows to set server and options (by default 'http').
  --server-options-passphrase <value>                 Passphrase for a pfx file.
  --server-options-request-cert                       Request for an SSL certificate.
  --no-server-options-request-cert                    Does not request for an SSL certificate.
  --server-options-ca <value...>                      Path to an SSL CA certificate or content of an SSL CA certificate.
  --server-options-ca-reset                           Clear all items provided in 'server.options.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate.
  --server-options-cert <value...>                    Path to an SSL certificate or content of an SSL certificate.
  --server-options-cert-reset                         Clear all items provided in 'server.options.cert' configuration. Path to an SSL certificate or content of an SSL certificate.
  --server-options-crl <value...>                     Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).
  --server-options-crl-reset                          Clear all items provided in 'server.options.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).
  --server-options-key <value...>                     Path to an SSL key or content of an SSL key.
  --server-options-key-reset                          Clear all items provided in 'server.options.key' configuration. Path to an SSL key or content of an SSL key.
  --server-options-pfx <value...>                     Path to an SSL pfx file or content of an SSL pfx file.
  --server-options-pfx-reset                          Clear all items provided in 'server.options.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file.
  --static [value...]                                 Allows to configure options for serving static files from directory (by default 'public' directory).
  --no-static                                         Disallows to configure options for serving static files from directory.
  --static-directory <value...>                       Directory for static contents.
  --static-public-path <value...>                     The static files will be available in the browser under this public path.
  --static-serve-index                                Tells dev server to use serveIndex middleware when enabled.
  --no-static-serve-index                             Does not tell dev server to use serveIndex middleware.
  --static-watch                                      Watches for files in static content directory.
  --no-static-watch                                   Does not watch for files in static content directory.
  --static-reset                                      Clear all items provided in 'static' configuration. Allows to configure options for serving static files from directory (by default 'public' directory).
  --static-public-path-reset                          Clear all items provided in 'static.publicPath' configuration. The static files will be available in the browser under this public path.
  --watch-files <value...>                            Allows to configure list of globs/directories/files to watch for file changes.
  --watch-files-reset                                 Clear all items provided in 'watchFiles' configuration. Allows to configure list of globs/directories/files to watch for file changes.
  --no-web-socket-server                              Disallows to set web socket server and options.
  --web-socket-server-type <value>                    Allows to set web socket server and options (by default 'ws').

Global options:
  --color                                             Enable colors on console.
  --no-color                                          Disable colors on console.
  -v, --version                                       Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands.
  -h, --help [verbose]                                Display help for commands and options.

To see list of all supported commands and options run 'webpack --help=verbose'.

Webpack documentation: https://webpack.js.org/.
CLI documentation: https://webpack.js.org/api/cli/.
Made with ♥ by the webpack team.

[!NOTE]

Detailed documentation for above options is available on this link.

With NPM Scripts

NPM package.json scripts are a convenient and useful means to run locally installed binaries without having to be concerned about their full paths. Simply define a script as such:

{
  "scripts": {
    "serve": "webpack serve"
  }
}

And run the following in your terminal/console:

npm run serve

NPM will automatically refer to the the binary in node_modules for you, and execute the file or command.

With the API

While it's recommended to run webpack-dev-server via the CLI, you may also choose to start a server via the API.

See the related API documentation for webpack-dev-server.

With TypeScript

If you use TypeScript in the webpack config, you'll need to properly type devServer property in order to avoid TS errors (e.g. 'devServer' does not exist in type 'Configuration'). For that use either:

/// <reference path="node_modules/webpack-dev-server/types/lib/Server.d.ts"/>
import type { Configuration } from "webpack";

// Your logic

Or you can import the type from webpack-dev-server, i.e.

import type { Configuration as DevServerConfiguration } from "webpack-dev-server";
import type { Configuration } from "webpack";

const devServer: DevServerConfiguration = {};
const config: Configuration = { devServer };

// module.exports
export default config;

The Result

Either method will start a server instance and begin listening for connections from localhost on port 8080.

webpack-dev-server is configured by default to support live-reload of files as you edit your assets while the server is running.

See the documentation for more use cases and options.

Browser Support

While webpack-dev-server transpiles the client (browser) scripts to an ES5 state, the project only officially supports the last two versions of major browsers. We simply don't have the resources to support every whacky browser out there.

If you find a bug with an obscure / old browser, we would actively welcome a Pull Request to resolve the bug.

Support

We do our best to keep issues in the repository focused on bugs, features, and needed modifications to the code for the module. Because of that, we ask users with general support, "how-to", or "why isn't this working" questions to try one of the other support channels that are available.

Your first-stop-shop for support for webpack-dev-server should be the excellent documentation for the module. If you see an opportunity for improvement of those docs, please head over to the webpack.js.org repo and open a pull request.

From there, we encourage users to visit the webpack discussions and talk to the fine folks there. If your quest for answers comes up dry in chat, head over to StackOverflow and do a quick search or open a new question. Remember; It's always much easier to answer questions that include your webpack.config.js and relevant files!

If you're twitter-savvy you can tweet #webpack with your question and someone should be able to reach out and lend a hand.

If you have discovered a :bug:, have a feature suggestion, or would like to see a modification, please feel free to create an issue on Github. Note: The issue template isn't optional, so please be sure not to remove it, and please fill it out completely.

Contributing

We welcome your contributions! Please have a read of CONTRIBUTING.md for more information on how to get involved.

Attribution

This project is heavily inspired by peerigon/nof5.

License

MIT

NPM DownloadsLast 30 Days