|
| 1 | +# @rspack/dev-server Migration Guide (v1 -> v2) |
| 2 | + |
| 3 | +This guide covers breaking changes you need to handle when upgrading `@rspack/dev-server` from v1 to v2. |
| 4 | + |
| 5 | +## Breaking Changes |
| 6 | + |
| 7 | +### Drop Node 18 Support |
| 8 | + |
| 9 | +Node.js 18 is no longer supported in v2. |
| 10 | + |
| 11 | +The minimum supported Node.js version is now `^20.19.0 || >=22.12.0`. |
| 12 | + |
| 13 | +### Drop Rspack v1 Support |
| 14 | + |
| 15 | +`@rspack/dev-server` v2 is designed to work with Rspack v2. Rspack v1 is no longer supported in v2. |
| 16 | + |
| 17 | +### Upgraded `http-proxy-middleware` to v3 |
| 18 | + |
| 19 | +`http-proxy-middleware` has been updated to v3, which has some breaking changes: |
| 20 | + |
| 21 | +- `proxy[].path` is removed. Use `pathFilter` (or `context`) instead. |
| 22 | + |
| 23 | +```diff |
| 24 | +{ |
| 25 | +- path: '/api', |
| 26 | ++ pathFilter: '/api', |
| 27 | +} |
| 28 | +``` |
| 29 | + |
| 30 | +- `logLevel` / `logProvider` are replaced by `logger`. |
| 31 | + |
| 32 | +```diff |
| 33 | +- logLevel: 'warn', |
| 34 | ++ logger: console, |
| 35 | +``` |
| 36 | + |
| 37 | +- `onProxyReq` / `onProxyRes` / `onProxyReqWs` are moved to `on: { ... }`. |
| 38 | + |
| 39 | +```diff |
| 40 | +- onProxyReq(proxyReq) { |
| 41 | +- proxyReq.setHeader('x-from', 'dev-server'); |
| 42 | +- }, |
| 43 | ++ on: { |
| 44 | ++ proxyReq(proxyReq) { |
| 45 | ++ proxyReq.setHeader('x-from', 'dev-server'); |
| 46 | ++ }, |
| 47 | ++ }, |
| 48 | +``` |
| 49 | + |
| 50 | +- `proxy[].bypass` is removed, use `pathFilter` or `router` instead. |
| 51 | + - When `bypass` was used and that function returned a boolean, it would automatically result in a 404 request. This can’t be achieved in a similar way now, or, if it returned a string, you can do what was done in the example above. |
| 52 | + - `bypass` also allowed sending data; this can no longer be done. If you really need to do it, you’d have to create a new route in the proxy that sends the same data, or alternatively create a new route on the main server and, following the example above, send the data you wanted. |
| 53 | + |
| 54 | +> Refer to the [http-proxy-middleware v3 migration guide](https://github.com/chimurai/http-proxy-middleware/blob/master/MIGRATION.md) for details. |
| 55 | +
|
| 56 | +### Upgraded Express to v5 |
| 57 | + |
| 58 | +`express`` has been updated to v5, see [Introducing Express v5: A New Era for the Node.js Framework](https://expressjs.com/2024/10/15/v5-release.html) for details. |
| 59 | + |
| 60 | +### Removed `spdy` support |
| 61 | + |
| 62 | +- `server.type: "spdy"` is no longer supported. |
| 63 | +- `server.options.spdy` is no longer supported. |
| 64 | + |
| 65 | +You can switch to `server.type: "http2"` or `"https"` instead. |
| 66 | + |
| 67 | +```js |
| 68 | +// Before |
| 69 | +export default { |
| 70 | + devServer: { |
| 71 | + server: { |
| 72 | + type: 'spdy', |
| 73 | + options: { |
| 74 | + spdy: { protocols: ['h2', 'http/1.1'] }, |
| 75 | + }, |
| 76 | + }, |
| 77 | + }, |
| 78 | +}; |
| 79 | + |
| 80 | +// After |
| 81 | +export default { |
| 82 | + devServer: { |
| 83 | + server: { |
| 84 | + type: 'http2', // or 'https' |
| 85 | + options: {}, |
| 86 | + }, |
| 87 | + }, |
| 88 | +}; |
| 89 | +``` |
| 90 | + |
| 91 | +### Removed SockJS support (`ws` only) |
| 92 | + |
| 93 | +In v2, the following SockJS options are no longer available: |
| 94 | + |
| 95 | +- `webSocketServer: "sockjs"` |
| 96 | +- `webSocketServer: { type: "sockjs" }` |
| 97 | +- `client.webSocketTransport: "sockjs"` |
| 98 | +- `webSocketServer.options.prefix` (use `path`) |
| 99 | + |
| 100 | +Also, SockJS bundle routes were removed. |
| 101 | + |
| 102 | +```js |
| 103 | +// Before |
| 104 | +export default { |
| 105 | + devServer: { |
| 106 | + webSocketServer: 'sockjs', |
| 107 | + client: { |
| 108 | + webSocketTransport: 'sockjs', |
| 109 | + }, |
| 110 | + }, |
| 111 | +}; |
| 112 | + |
| 113 | +// After |
| 114 | +export default { |
| 115 | + devServer: { |
| 116 | + webSocketServer: 'ws', |
| 117 | + client: { |
| 118 | + webSocketTransport: 'ws', |
| 119 | + }, |
| 120 | + }, |
| 121 | +}; |
| 122 | +``` |
| 123 | + |
| 124 | +If you need a non-default transport/server, you can provide a custom implementation path instead of `'sockjs'`. |
| 125 | + |
| 126 | +### Removed `bonjour` |
| 127 | + |
| 128 | +Built-in Bonjour support is removed in v2. |
| 129 | + |
| 130 | +If Bonjour/ZeroConf broadcasting is still important for your workflow, consider integrating `bonjour-service` directly in your app code. |
| 131 | + |
| 132 | +### Renamed `webpack-dev-server-*` to `rspack-dev-server-*` |
| 133 | + |
| 134 | +If your setup still uses the legacy names, you can update them as follows: |
| 135 | + |
| 136 | +- Environment variables |
| 137 | + - `WEBPACK_DEV_SERVER_BASE_PORT` -> `RSPACK_DEV_SERVER_BASE_PORT` |
| 138 | + - `WEBPACK_DEV_SERVER_PORT_RETRY` -> `RSPACK_DEV_SERVER_PORT_RETRY` |
| 139 | +- URL query flags |
| 140 | + - `webpack-dev-server-hot=false` -> `rspack-dev-server-hot=false` |
| 141 | + - `webpack-dev-server-live-reload=false` -> `rspack-dev-server-live-reload=false` |
| 142 | +- Built-in routes |
| 143 | + - `/webpack-dev-server/*` -> `/rspack-dev-server/*` |
| 144 | + |
| 145 | +```txt |
| 146 | +# Before |
| 147 | +http://localhost:8080/?webpack-dev-server-hot=false&webpack-dev-server-live-reload=false |
| 148 | +GET /webpack-dev-server/invalidate |
| 149 | +GET /webpack-dev-server/open-editor?fileName=... |
| 150 | +
|
| 151 | +# After |
| 152 | +http://localhost:8080/?rspack-dev-server-hot=false&rspack-dev-server-live-reload=false |
| 153 | +GET /rspack-dev-server/invalidate |
| 154 | +GET /rspack-dev-server/open-editor?fileName=... |
| 155 | +``` |
0 commit comments