Skip to content
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

Allow Web Workers on legacy #10383

Open
4 tasks done
Tal500 opened this issue Oct 8, 2022 · 1 comment · May be fixed by #12320
Open
4 tasks done

Allow Web Workers on legacy #10383

Tal500 opened this issue Oct 8, 2022 · 1 comment · May be fixed by #12320

Comments

@Tal500
Copy link
Contributor

Tal500 commented Oct 8, 2022

Description

Web workers are broken on legacy mode, althought caiuseit shows it can be used on legacy browsers(IE10+ supports for example non-shared web workers). Not even a warning is displayed to the user.

This could have been filed as a bug request, but I think it's better as a feature.

Suggested solution

I saw the code of the Vite worker plugin, and the initial impression is that plugin-legacy can use a regular expressions on renderChunk to find the locations the expression "new Worker" is defined, find the right worker file it reference, and transform it to legacy using Babel. But:

  1. That's seems much more complicated than it needs to.
  2. Does not work with worker inline import(i.e. inline as a query param in import).

Can we somehow overcome this, maybe by replace the worker constructions with some tokens on transform(), and resolves them later in the renderChunk phase?
This way:

  1. Vite worker plugin will check if the current format isn't system, and only then will emit the workers assets and replace the URL/inlined-code there.
  2. Vite plugin-legacy will do the same only for the system format, and will transform the worker code via Babel to support legacy.

Alternative

No response

Additional context

No response

Validations

@Tal500
Copy link
Contributor Author

Tal500 commented Oct 8, 2022

Alternatively, and maybe it will be simpler, we can just check if the current format is system directly in the internal worker plugin. If so, then whenever the plugin build the worker asset, we can build the legacy asset instead, via babel transforming and using terser for minification, the same way that is done on the legacy plugin.

Any thoughts?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants