webpack-dev-server vs nodemon vs concurrently vs pm2 vs live-server vs forever vs node-dev
Node.js Development Tools Comparison
1 Year
webpack-dev-servernodemonconcurrentlypm2live-serverforevernode-devSimilar Packages:
What's Node.js Development Tools?

These npm packages are tools designed to enhance the development experience in Node.js applications. They provide functionalities such as running multiple processes concurrently, automatically restarting applications on file changes, serving static files with live reloading, and managing application processes in production. Each tool serves a specific purpose, making it easier for developers to streamline their workflows and improve productivity during development and deployment.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
webpack-dev-server14,045,9717,814541 kB362 months agoMIT
nodemon7,408,06326,454220 kB72 months agoMIT
concurrently6,579,6607,248406 kB702 months agoMIT
pm22,108,23741,921797 kB1,0173 months agoAGPL-3.0
live-server87,0214,46053.7 kB216-MIT
forever76,64613,893150 kB345-MIT
node-dev66,1062,25139.5 kB37-MIT
Feature Comparison: webpack-dev-server vs nodemon vs concurrently vs pm2 vs live-server vs forever vs node-dev

Process Management

  • webpack-dev-server:

    Webpack-dev-server is not a process manager but a development server that works with Webpack, providing features like hot module replacement for a smoother development experience.

  • nodemon:

    Nodemon watches your application files and restarts the server on changes, providing a simple yet effective way to manage development processes without manual intervention.

  • concurrently:

    Concurrently allows you to run multiple commands in parallel, making it easy to manage and execute multiple scripts simultaneously without the hassle of managing multiple terminal windows.

  • pm2:

    PM2 is a powerful process manager that not only keeps your applications running but also provides advanced features like load balancing, monitoring, and logging, making it suitable for production use.

  • live-server:

    Live-server does not manage processes but serves static files with live reloading, making it ideal for front-end development rather than backend process management.

  • forever:

    Forever is focused on keeping your Node.js applications running indefinitely, automatically restarting them if they crash, which is essential for production environments.

  • node-dev:

    Node-dev restarts your application on file changes, but it does not provide extensive process management features like monitoring or clustering.

Live Reloading

  • webpack-dev-server:

    Webpack-dev-server offers live reloading and hot module replacement, making it ideal for modern JavaScript applications where instant feedback is crucial.

  • nodemon:

    Nodemon provides automatic restarts of your Node.js application on file changes, but it does not handle live reloading of the browser.

  • concurrently:

    Concurrently does not provide live reloading by itself; it simply runs multiple scripts, but you can combine it with other tools that do offer live reloading.

  • pm2:

    PM2 does not provide live reloading features; it is more focused on managing and monitoring production applications.

  • live-server:

    Live-server excels in live reloading, automatically refreshing the browser whenever files change, which is invaluable for front-end development.

  • forever:

    Forever does not support live reloading; its primary function is to keep applications running continuously without crashes.

  • node-dev:

    Node-dev restarts the application on file changes, but it does not provide browser live reloading; it is focused on server-side development.

Ease of Use

  • webpack-dev-server:

    Webpack-dev-server is easy to use for those familiar with Webpack; it integrates well into the Webpack configuration, but may require some setup for beginners.

  • nodemon:

    Nodemon is very easy to use, requiring just a single command to start your application with automatic restarts, making it a favorite among Node.js developers.

  • concurrently:

    Concurrently is straightforward to use, requiring minimal configuration to run multiple scripts, making it accessible for developers of all levels.

  • pm2:

    PM2 has a steeper learning curve due to its extensive features, but it offers a comprehensive command-line interface that provides powerful process management capabilities.

  • live-server:

    Live-server is extremely user-friendly; it requires no configuration and can be started with a single command, perfect for quick static site development.

  • forever:

    Forever is simple to set up and use, providing a command-line interface that is easy to understand, making it suitable for both beginners and experienced developers.

  • node-dev:

    Node-dev is easy to use for developers familiar with Node.js, as it integrates seamlessly into the development workflow without complex setup.

Production Readiness

  • webpack-dev-server:

    Webpack-dev-server is designed for development and should not be used in production; it provides features that are beneficial during the development phase.

  • nodemon:

    Nodemon is also a development tool and should not be used in production, as it is designed for automatic restarts during development.

  • concurrently:

    Concurrently is primarily a development tool and is not intended for production use, as it lacks features like process management and monitoring.

  • pm2:

    PM2 is highly suitable for production environments, offering features like clustering, monitoring, and logging to ensure applications run smoothly and efficiently.

  • live-server:

    Live-server is not meant for production; it is designed for development environments to serve static files with live reloading.

  • forever:

    Forever is suitable for production use, providing a simple way to keep applications running continuously, but lacks advanced features like monitoring and clustering.

  • node-dev:

    Node-dev is intended for development purposes only and is not suitable for production environments due to its focus on rapid development cycles.

Monitoring and Logging

  • webpack-dev-server:

    Webpack-dev-server does not provide monitoring or logging features; it focuses on development and live reloading capabilities.

  • nodemon:

    Nodemon does not offer monitoring or logging; it is designed for automatic restarts without tracking application performance.

  • concurrently:

    Concurrently does not provide any monitoring or logging features; it simply runs scripts in parallel without tracking their status.

  • pm2:

    PM2 excels in monitoring and logging, providing detailed insights into application performance, resource usage, and error tracking, making it ideal for production environments.

  • live-server:

    Live-server does not provide any monitoring or logging capabilities; it focuses solely on serving files and live reloading.

  • forever:

    Forever offers basic logging capabilities, allowing you to view the output of your applications, but lacks advanced monitoring features.

  • node-dev:

    Node-dev does not include monitoring or logging features; it is focused on restarting applications during development.

How to Choose: webpack-dev-server vs nodemon vs concurrently vs pm2 vs live-server vs forever vs node-dev
  • webpack-dev-server:

    Use webpack-dev-server if you are developing applications with Webpack and need a development server that provides live reloading and hot module replacement, streamlining the development process for modern JavaScript applications.

  • nodemon:

    Choose nodemon for a reliable and widely-used solution that watches for file changes in your Node.js application and automatically restarts the server, making it ideal for development environments.

  • concurrently:

    Choose concurrently if you need to run multiple npm scripts at the same time, allowing for a more efficient development process without the need to open multiple terminal windows.

  • pm2:

    Select pm2 if you are looking for a robust process manager for production applications, offering features like monitoring, clustering, and easy deployment, ensuring your applications run smoothly and efficiently.

  • live-server:

    Opt for live-server if you are developing static websites or front-end applications and want a quick way to serve your files with live reloading capabilities, enhancing your development workflow.

  • forever:

    Select forever if you want a simple solution to keep your Node.js applications running continuously in the background, especially for long-running scripts or applications that need to be resilient against crashes.

  • node-dev:

    Use node-dev if you require a tool that automatically restarts your Node.js application when file changes are detected, providing a faster feedback loop during development without the need for manual restarts.

README for webpack-dev-server

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