What is webpack-dev-server?
webpack-dev-server is a development server that provides live reloading. It is intended to be used with webpack, a module bundler. It uses webpack's watch mode and, when changes are detected, it recompiles the bundle and notifies the client to reload the page.
What are webpack-dev-server's main functionalities?
Live Reloading
Automatically reloads the page when files are changed. The 'hot' option enables Hot Module Replacement without page refresh as fallback in case of build failures.
module.exports = {
devServer: {
contentBase: './dist',
hot: true
}
};
Custom Middleware
Allows developers to add custom routes before the server starts. Useful for mocking an API or other custom server logic.
module.exports = {
devServer: {
before: function(app, server) {
app.get('/some/path', function(req, res) {
res.json({ custom: 'response' });
});
}
}
};
Proxying API Requests
Redirects API calls to another server. This is useful when you have a separate API backend development server and you want to send API requests on the same domain.
module.exports = {
devServer: {
proxy: {
'/api': 'http://localhost:3000'
}
}
};
HTTPS Support
Allows serving the webpack application over HTTPS. This is useful for testing applications that require secure connections.
module.exports = {
devServer: {
https: true
}
};
Other packages similar to webpack-dev-server
browser-sync
BrowserSync is an automation tool that makes web development faster. It synchronizes file changes and interactions across multiple devices. It's similar to webpack-dev-server but works across multiple browsers and devices.
lite-server
Lite-server is a lightweight development server that serves a web app, opens it in the browser, and refreshes the browser on file changes. It is built on top of BrowserSync and provides fewer configuration options compared to webpack-dev-server.
serve
Serve is a static server that lets you serve static files quickly. It is simpler than webpack-dev-server and does not have built-in support for live reloading or module bundling.
http-server
http-server is a simple, zero-configuration command-line HTTP server. It is powerful and has the ability to serve static files, but lacks the advanced features of webpack-dev-server like live reloading and module hot replacement.
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
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 CLI. In the directory where your
webpack.config.js
is, run:
node_modules/.bin/webpack-dev-server
Note: Many CLI options are available with webpack-dev-server
. Explore 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": {
"start:dev": "webpack-dev-server"
}
And run the following in your terminal/console:
npm run start:dev
NPM will automagically reference the binary in node_modules
for you, and
execute the file or command.
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 by 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 Gitter chat 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