vitejs / vite

Next generation frontend tooling. It's fast!
http://vite.dev
MIT License
68.33k stars 6.16k forks source link

HMR API doesn't work with `ssrLoadModule` #7887

Closed Rich-Harris closed 9 months ago

Rich-Harris commented 2 years ago

Describe the bug

If a module loaded with ssrLoadModule is invalidated, it is evicted from the module graph but isn't cleaned up. If it's subsequently loaded again, any resources created in the old module (websocket servers, timeouts, etc) will stick around, causing issues like https://github.com/sveltejs/kit/issues/2903.

Ideally, I think the HMR API would apply to ssrLoadModule as well as modules loaded in the browser.

Reproduction

https://github.com/Rich-Harris/vite-ssr-hmr-repro

System Info

System:
    OS: macOS 12.0.1
    CPU: (10) arm64 Apple M1 Max
    Memory: 278.28 MB / 32.00 GB
    Shell: 5.8 - /bin/zsh
  Binaries:
    Node: 16.13.1 - ~/.nvm/versions/node/v16.13.1/bin/node
    Yarn: 1.22.17 - ~/.nvm/versions/node/v16.13.1/bin/yarn
    npm: 8.1.2 - ~/.nvm/versions/node/v16.13.1/bin/npm
  Browsers:
    Chrome: 100.0.4896.127
    Firefox: 99.0.1
    Safari: 15.1
  npmPackages:
    vite: ^2.9.5 => 2.9.5

Used Package Manager

pnpm

Logs

No response

Validations

sapphi-red commented 2 years ago

Maybe #4824 is related?

Rich-Harris commented 2 years ago

No, that's about client-side HMR

sapphi-red commented 2 years ago

I know about it. Both reproduction behaved simillar so I thought it might have the same reason underlying. I noticed I was misunderstanding the issue.