Skip to content

bug(ssr): vite hmr server called twice when use two configurations in server side render #20504

@zhangyuang

Description

@zhangyuang

Describe the bug

In vite ssr, if I separate vite config logic to different files like vite.client.config.ts and vite.server.config.ts, and I get viteDevServer instance by calling createServer method use these configurations.

On the server side, I use ssrLoadModule in the viteDevServer instance, like

const viteServer = await createServer(serverConfig)
await (viteServer as ViteDevServer).ssrLoadModule(viteServerEntry)

On the client side, I use a ViteDevServer instance with middleware mode, like

const viteServer: ViteDevServer = await createServer(clientConfig)
proxyMiddlewaresArr.push(viteServer.middlewares)

It's a common practice in server-side render projects. But in rolldown-vite, the websocket server will call the listen function twice because createServer is called twice. In my opinion, there is no need to create a Websocket server when I only use ViteDevServer for ssrLoadModule.

I can confirm the logic is expected in vite@^2.0.0 because I am upgrading [email protected] to rolldown-vite in my server-side render framework.

Reproduction

reproduce

Steps to reproduce

$ git clone [email protected]:zhangyuang/vite-ssr-external-bug.git
$ git checkout bug/ssrdevserver
$ yarn && npm run dev

System Info

System:
    OS: macOS 15.5
    CPU: (14) arm64 Apple M4 Pro
    Memory: 1012.33 MB / 48.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 24.4.1 - ~/Library/pnpm/node
    Yarn: 1.22.22 - ~/Library/pnpm/yarn
    npm: 10.8.2 - ~/Library/pnpm/npm
    pnpm: 10.13.1 - ~/Library/pnpm/pnpm
  Browsers:
    Chrome: 138.0.7204.169
    Firefox Nightly: 140.0a1
    Safari: 18.5
  npmPackages:
    vite: ^7.0.0 => 7.0.6

Used Package Manager

npm

Logs

No response

Validations

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions