-
-
Notifications
You must be signed in to change notification settings - Fork 6.7k
Empty module if dep is not optimized ahead of time #1949
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
This is expected, because a new found import may have cross-imports with other existing deps, which can lead to invalidations of other pending or already imported imports. i.e. a new import doesn't necessarily only affect that import itself. To ensure correctness it is necessary to perform a full reload. |
@yyx990803 Is there any way for me to workaround for my use case, where a reload is not possible? I am using vite to transpile modules for a puppeteer-based test runner, and if the browser reloaded in the middle of the test all of the state would get lost and the test would fail. |
But this should only happen if you are editing the files? Are you editing source files during the tests? |
The files that are run in the browser are virtual files that are given to vite via a rollup plugin So vite's crawler can't find the deps to pre-bundle them ahead of time |
Is there a way at runtime for me to tell Vite to walk a module graph and perform dep optimization? Sort of like adding entries to library mode at runtime? Also, does the dep optimizer run rollup plugins for resolution/loading/transpiling when it figures out the module graph? |
Well, adding entries at runtime leads to a re-bundle and requires a reload. So I'm afraid you'll have to rethink your use case. |
I have a few more questions, sorry 🙈
I think I am able to make my use case work if the first one is true, or if both the second and third are true |
If the dep provides pure ESM you can list it in https://vitejs.dev/config/#optimizedeps-exclude
No.
Yes it keeps previously found imports as long as the lockfile + vite config didn't change. |
👍 I am planning to make it restart the test when Vite performs just-in-time-pre-bundling. Would you accept a PR to expose events to the API that trigger at the same time as these logs?
|
Describe the bug
This is somewhere between a bug and a feature request/question:
I have a use case where I am using Vite via createServer, and the files that will be bundled are not known ahead of time (so the dependency pre-bundling won't/can't work).
Here's what I expect to happen:
?v=
param depends on the pre-bundle already existingSomething like:
/node_modules/.vite/jquery.js?v=1d07b389
and once Vite finishes bundling it Vite responds with itHere's what currently happens:
On step 3 Vite responds with:
And when I fetch
/node_modules/jquery/dist/jquery.js
Vite responds with an empty file and without a content-type so the module can't be executed.Reproduction
You can see the bug here: https://github.com/calebeby/vite-bug
npm i
node_modules/.vite
if you ran it previouslynpm run dev
await import('http://localhost:3000/main.js')
There is code in place that triggers a full-reload when a missing pre-bundled dep gets bundled, but what I am not understanding is why vite doesn't just wait to respond until the pre-bundled dep gets pre-bundled. I think WMR's npm middleware handles it closer to the way I expect
The text was updated successfully, but these errors were encountered: