Skip to content

Commit 5a3a010

Browse files
authored
fix(server): release previous environments after initialization (#23499)
1 parent 1929b4c commit 5a3a010

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

‎packages/vite/src/node/__tests__/dev.spec.ts‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { createServer, resolveConfig } from '..'
55
import type { ViteDevServer } from '..'
66
import { promiseWithResolvers } from '../../shared/utils'
77
import { createLogger } from '../logger'
8+
import { _createServer } from '../server'
89
import { DevEnvironment } from '../server/environment'
910
import { normalizePath } from '../utils'
1011

@@ -32,6 +33,37 @@ describe('the dev server', () => {
3233
await server?.close()
3334
})
3435

36+
test('releases previous environments after initialization', async () => {
37+
const previousServer = await createServer({
38+
configFile: false,
39+
root: import.meta.dirname,
40+
optimizeDeps: { noDiscovery: true },
41+
server: { middlewareMode: true, ws: false },
42+
})
43+
const options = {
44+
listen: false,
45+
previousEnvironments: previousServer.environments,
46+
}
47+
48+
try {
49+
const config = await resolveConfig(
50+
{
51+
configFile: false,
52+
root: import.meta.dirname,
53+
optimizeDeps: { noDiscovery: true },
54+
server: { middlewareMode: true, ws: false },
55+
},
56+
'serve',
57+
)
58+
const nextServer = await _createServer(config, options)
59+
60+
expect(options.previousEnvironments).toBeUndefined()
61+
await nextServer.close()
62+
} finally {
63+
await previousServer.close()
64+
}
65+
})
66+
3567
test('resolves each environment input as a safe module', async () => {
3668
const root = path.join(import.meta.dirname, 'fixtures', 'input-option')
3769
const clientEntry = normalizePath(path.join(root, 'client-entry.js'))

‎packages/vite/src/node/server/index.ts‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,10 @@ export async function _createServer(
625625
),
626626
)
627627

628+
// Release previous environments after initialization to prevent memory leaks
629+
// from retaining old server graphs across restarts.
630+
options.previousEnvironments = undefined
631+
628632
// Backward compatibility
629633

630634
let moduleGraph = new ModuleGraph({

0 commit comments

Comments
 (0)