Open userquin opened 3 years ago
I fix packages/vite/src/client/overlay.ts
and packages/vite/src/client/client.ts
checking for typeof window
, but it seems we cannot use dynamic imports on service workers (I think on web workers
should work):
The link if someone interested: https://github.com/w3c/ServiceWorker/issues/1356
A question about building vite
on local via pnpm run build-vite
script: why each time I build vite
, this file packages/vite/LICENSE.md
is changed? All licenses removed:
PR https://github.com/vitejs/vite/pull/9064 fixed for me the HTMLElement is not defined
error with HMR on web workers. Perhaps that would also fix the issue on service workers?
PR #9064 fixed for me the
HTMLElement is not defined
error with HMR on web workers. Perhaps that would also fix the issue on service workers?
The issue is now with react-refresh (I think?)
@react-refresh:367 Uncaught ReferenceError: window is not defined
at @react-refresh:367:1
which is this line
I am now hitting the issue with $RefreshReg$
as well, after updating Vite to fix the one with overlay.ts
trans-utils.tsx:5 Uncaught ReferenceError: $RefreshReg$ is not defined
My stack trace is on a random (the first in the dependency graph maybe?) bit of JSX.
Has anyone come up with a solution?
The way to solve this is by adding a side-effectful module that you import before any other modules in your worker.
PR #9064 fixed for me the
HTMLElement is not defined
error with HMR on web workers. Perhaps that would also fix the issue on service workers?The issue is now with react-refresh (I think?)
@react-refresh:367 Uncaught ReferenceError: window is not defined at @react-refresh:367:1
which is this line
I am still having this issue, after trying to migrate from rewired version of react create app.
The fix by @cpojer alone did not work, I also had to disable the react plugin... which makes vite painful to use while developing a large project.
How can Vite be so popular without having this right?!
It seems to be due to random imports (which do not use jsx) which then, for whatever reason, bundles react-refresh with them.
No HMR is sort of a dealbreaker on a large project like ours.
The issue is now with react-refresh (I think?)
@react-refresh:367 Uncaught ReferenceError: window is not defined at @react-refresh:367:1
@ashleyww93 Running into the same issue with a new SharedWorker I'm working on. Was worried it was due to some transitive import, which sounds likely. Also wondering if rolling back Vite a few versions would have any effect.
The issue is now with react-refresh (I think?)
@react-refresh:367 Uncaught ReferenceError: window is not defined at @react-refresh:367:1
@ashleyww93 Running into the same issue with a new SharedWorker I'm working on. Was worried it was due to some transitive import, which sounds likely. Also wondering if rolling back Vite a few versions would have any effect.
We couldn’t find the import that causes this for us.
We are importing this as a side effect and it’s now working well.
https://gist.github.com/ashleyww93/12f8350ecc552c1d29ce93271147f325
We couldn’t find the import that causes this for us.
We are importing this as a side effect and it’s now working well.
https://gist.github.com/ashleyww93/12f8350ecc552c1d29ce93271147f325
Interesting, it's defined now, but thinks it's being loaded twice due to the presence of $RefreshReg$
if (window.$RefreshReg$) {
throw new Error(
"React refresh runtime was loaded twice. Maybe you forgot the base path?"
);
}
Assuming you aren't hitting that issue? I'm going to just try setting it to undefined or something falsey.
Describe the bug
I'm trying to add HMR to a service worker, I don't know if I can do that, right now it is failing.
The sw code:
The client error:
The failing code:
Reproduction
Here the branch on my repo: https://github.com/userquin/vite-plugin-pwa/tree/feat/add-development-support
pnpm
installed globally required andnode 12+
, I'm testing withnode 15
vianvm
: once cloned and checkoutfeat/add-development-support
executepnpm install && pnpm run build
from root folder.To run the sw example on dev, execute, also from root folder,
pnpm run example:dev:sw
.Open the app in Chrome, it is registered with
type: 'module'
.If you remove the
import.meta.hot
fromexamples/vue-basic-inject-manifest/src/sw.ts
, the service worker will work.The logic for the plugin can be found on
src/index.ts
, search last plugin (name: 'vite-plugin-pwa:dev-sw'
), the internal logic onsrc/dev.ts
: the example onexamples/vue-basic-inject-manifest
.System Info
Used Package Manager
pnpm
Logs
Since it is on client, here the logs on dev tools (see screenshots):
Validations