(server: ViteDevServer)
| 1337 | } |
| 1338 | |
| 1339 | async function restartServer(server: ViteDevServer) { |
| 1340 | global.__vite_start_time = performance.now() |
| 1341 | |
| 1342 | let inlineConfig = server.config.inlineConfig |
| 1343 | if (server._forceOptimizeOnRestart) { |
| 1344 | inlineConfig = mergeConfig(inlineConfig, { |
| 1345 | forceOptimizeDeps: true, |
| 1346 | }) |
| 1347 | } |
| 1348 | |
| 1349 | // Reinit the server by creating a new instance using the same inlineConfig |
| 1350 | // This will trigger a reload of the config file and re-create the plugins and |
| 1351 | // middlewares. We then assign all properties of the new server to the existing |
| 1352 | // server instance and set the user instance to be used in the new server. |
| 1353 | // This allows us to keep the same server instance for the user. |
| 1354 | { |
| 1355 | let newServer: ViteDevServer | null = null |
| 1356 | try { |
| 1357 | // delay ws server listen |
| 1358 | newServer = await _createServer(inlineConfig, { |
| 1359 | listen: false, |
| 1360 | previousEnvironments: server.environments, |
| 1361 | previousShortcutsState: server._shortcutsState, |
| 1362 | previousRestartPromise: server._restartPromise, |
| 1363 | previousForceOptimizeOnRestart: server._forceOptimizeOnRestart, |
| 1364 | }) |
| 1365 | } catch (err: any) { |
| 1366 | server.config.logger.error(err.message, { |
| 1367 | timestamp: true, |
| 1368 | }) |
| 1369 | server.config.logger.error('server restart failed', { timestamp: true }) |
| 1370 | return |
| 1371 | } |
| 1372 | |
| 1373 | // Detach readline so close handler skips it. Reused to avoid stdin issues |
| 1374 | server._shortcutsState = undefined |
| 1375 | |
| 1376 | await server.close() |
| 1377 | |
| 1378 | // Assign new server props to existing server instance |
| 1379 | const middlewares = server.middlewares |
| 1380 | newServer._configServerPort = server._configServerPort |
| 1381 | newServer._currentServerPort = server._currentServerPort |
| 1382 | Object.assign(server, newServer) |
| 1383 | |
| 1384 | // Keep the same connect instance so app.use(vite.middlewares) works |
| 1385 | // after a restart in middlewareMode (.route is always '/') |
| 1386 | middlewares.stack = newServer.middlewares.stack |
| 1387 | server.middlewares = middlewares |
| 1388 | |
| 1389 | // Rebind internal server variable so functions reference the user server |
| 1390 | newServer._setInternalServer(server) |
| 1391 | } |
| 1392 | |
| 1393 | const { |
| 1394 | logger, |
| 1395 | server: { port, middlewareMode }, |
| 1396 | } = server.config |
no test coverage detected