This document serves as a migration guide for webpack-dev-server@5.0.0.
-
Minimum supported
Node.jsversion is18.12.0. -
Minimum supported
webpackversion is5.0.0. -
Minimum compatible
webpack-cliversion is5.0.0but we recommend using the latest version. -
The
http2andhttpsoptions were removed in favor of theserveroption.v4:
module.exports = { devServer: { http2: true, https: { ca: "./path/to/server.pem", pfx: "./path/to/server.pfx", key: "./path/to/server.key", cert: "./path/to/server.crt", passphrase: "webpack-dev-server", requestCert: true, }, }, };
v5:
module.exports = { // ... devServer: { server: { type: "spdy", // or use 'https' options: { ca: "./path/to/server.pem", pfx: "./path/to/server.pfx", key: "./path/to/server.key", cert: "./path/to/server.crt", passphrase: "webpack-dev-server", requestCert: true, }, }, }, };
-
The
server.options.cacertoption was removed in favor of theserver.options.caoption.v4:
module.exports = { // ... devServer: { server: { type: "https", // or use 'https' options: { cacert: "./path/to/server.pem", }, }, }, };
v5:
module.exports = { // ... devServer: { server: { type: "https", options: { ca: "./path/to/server.pem", }, }, }, };
-
The
onAfterSetupMiddlewareandonBeforeSetupMiddlewareoptions were removed in favor of thesetupMiddlewaresoption.v4:
module.exports = { // ... devServer: { onAfterSetupMiddleware(devServer) { if (!devServer) { throw new Error("webpack-dev-server is not defined"); } devServer.app.get("/some/after-path", (req, res) => { res.json({ custom: "response" }); }); }, onBeforeSetupMiddleware(devServer) { if (!devServer) { throw new Error("webpack-dev-server is not defined"); } devServer.app.get("/some/before-path", (req, res) => { res.json({ custom: "response" }); }); }, }, };
v5:
module.exports = { // ... devServer: { setupMiddlewares: (middlewares, devServer) => { if (!devServer) { throw new Error("webpack-dev-server is not defined"); } devServer.app.get("/setup-middleware/some/path", (_, response) => { response.send("setup-middlewares option GET"); }); // Use the `unshift` method if you want to run a middleware before all other middlewares // or when you are migrating from the `onBeforeSetupMiddleware` option middlewares.unshift({ name: "first-in-array", // `path` is optional path: "/some/before-path", middleware: (req, res) => { res.send("Foo!"); }, }); // Use the `push` method if you want to run a middleware after all other middlewares // or when you are migrating from the `onAfterSetupMiddleware` option middlewares.push({ name: "hello-world-test-one", // `path` is optional path: "/some/after-bar", middleware: (req, res) => { res.send("Foo Bar!"); }, }); middlewares.push((req, res) => { res.send("Hello World!"); }); return middlewares; }, }, };
-
The
proxyoption's schema was updated to accept only an array.
v4:
module.exports = {
// ...
devServer: {
proxy: {
"/api": {
target: "http://localhost:3000",
changeOrigin: true,
},
},
},
};v5:
module.exports = {
// ...
devServer: {
proxy: [
{
context: ["/api"],
target: "http://localhost:3000",
changeOrigin: true,
},
],
},
};-
The
--open-appcli option was removed in favor of the--open-app-nameoption. -
The
--web-socket-servercli option was removed in favor of the--web-socket-server-typeoption. -
The
magicHtmloption was removed without replacement. -
The value of the
WEBPACK_SERVEenvironment variable was changed fromtrue(boolean) to'true'(string). -
webpack-dev-middlewarewas update to v7. -
The
constructorarguments were changed, now the first argument is dev server options, the second is compiler.v4:
const devServerOptions = { host: "127.0.0.1", port: 8080 }; const devServer = new Server(compiler, devServerOptions);
v5:
const devServerOptions = { host: "127.0.0.1", port: 8080 }; const devServer = new Server(devServerOptions, compiler);
-
The
listenmethod was removed in favor the asyncstartor thestartCallbackmethodsv4:
const devServerOptions = { host: "127.0.0.1", port: 8080 }; const devServer = new Server(compiler, devServerOptions); devServer.listen(devServerOptions.host, devServerOptions.port, () => { console.log("Running"); });
v5:
const devServerOptions = { host: "127.0.0.1", port: 8080 }; const devServer = new Server(devServerOptions, compiler); await devServer.start(); console.log("Running");
const devServerOptions = { host: "127.0.0.1", port: 8080 }; const devServer = new Server(devServerOptions, compiler); devServer.startCallback(() => { console.log("Running"); });
-
The
closemethod was removed in favor the asyncstopor thestopCallbackmethods.v4:
const devServerOptions = { host: "127.0.0.1", port: 8080 }; const devServer = new Server(compiler, devServerOptions); devServer.listen(devServerOptions.host, devServerOptions.port, () => { console.log("Running"); devServer.close(() => { console.log("Closed"); }); });
v5:
const devServerOptions = { host: "127.0.0.1", port: 8080 }; const devServer = new Server(devServerOptions, compiler); await devServer.start(); console.log("Running"); await devServer.stop(); console.log("Closed");
const devServerOptions = { host: "127.0.0.1", port: 8080 }; const devServer = new Server(devServerOptions, compiler); devServer.startCallback(() => { console.log("Running"); devServer.stopCallback(() => { console.log("Closed"); }); });
-
The
content-changedmethod was removed in favor of thestatic-changedmethod fromonSocketMessage.v4:
onSocketMessage["content-changed"]();
v5:
onSocketMessage["static-changed"]();
- Clean
closeevent listeners on socket server after generating new proxy config. - Improve error handling for WebsocketServer.
- Set
WEBPACK_SERVEto string value'true'. - Show warning using custom hostname and port with sockjs.
- The
bypassoption is deprecated for proxy in favor of therouterand thecontextoptions. Read more here.