diff --git a/packages/vite/src/node/__tests__/config.spec.ts b/packages/vite/src/node/__tests__/config.spec.ts index 30c3a4152f7b8a..719f3601ccb5e6 100644 --- a/packages/vite/src/node/__tests__/config.spec.ts +++ b/packages/vite/src/node/__tests__/config.spec.ts @@ -989,6 +989,30 @@ describe('mergeConfig', () => { } }) + test('mergeConfig handles server.hmr when server.ws is false', () => { + const mergedConfig = mergeConfig( + { + server: { + ws: false, + hmr: { host: 'localhost' }, + }, + }, + { + server: { + hmr: { port: 5173 }, + }, + }, + ) + + expect(mergedConfig.server).toMatchObject({ + ws: false, + hmr: { + host: 'localhost', + port: 5173, + }, + }) + }) + test('syncs `server.hmr.*` to `server.ws.*`', () => { const baseConfig = defineConfig({ server: { diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index cc064f8f655561..c587349591a473 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -1479,11 +1479,10 @@ function mergeConfigRecursively( } if (rootPath === 'server.hmr') { for (const key of wsOptionKeys) { - Object.defineProperty( - merged, - key, - Object.getOwnPropertyDescriptor(defaults, key)!, - ) + const descriptor = Object.getOwnPropertyDescriptor(defaults, key) + if (descriptor) { + Object.defineProperty(merged, key, descriptor) + } } }