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.
Getting Started
First thing's 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
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.
Caveats
Version 2.8.0 introduced a change which included ES6 keywords const
and let
within the scripts being served to the browser. This effects environments which
support no ES6 whatsoever, including older versions of UglifyJS and Internet
Explorer. This was not considered a breaking change at the time due to official
support for oldIE ending in 2016, rather this was seen as a maintenance update.
Those wishing to support oldIE should stick with version 2.7.1.
For version 2.8.0+ those using UglifyJS in their webpack configs should use the
beta version of uglifyjs-webpack-plugin independently, and not
the built-in plugin. This will change once the new version is out of beta.
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, of 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.
Maintainers
Attribution
This project is heavily inspired by peerigon/nof5.
License