If you're not familiar with
yet: They are a way to use multi-threading in web development and let you run
code off the main thread. You can communicate with them via
To create a web worker you use the
new Worker constructor and give it a URL to
the worker's source code:
const worker = new Worker("/worker.js")
If you want Webpack to recognize the worker file and run it through its build
pipeline use the
new URL constructor:
const worker = new Worker(new URL("./worker.js", import.meta.url))
Webpack creates a new entry point for your worker and processes all of its files
with the loaders and plugins you specified. This means you can use
import-statements in your worker as you are used to. Webpack will work its
usual magic to compile these away, so you don't need
native support for
import in workers,
which is still pretty sparse at the time of this writing.
You can also import libraries from npm into your worker and reuse code inside and outside the worker, if it is compatible with the worker environment.
If you want to make working with web workers easier, I recommend using the
comlink library. It makes
communicating with your worker as easy as calling a method or accessing a
property with async/await. No
And if you want to learn more about web workers in general, check out this talk by Surma. He gives a great introduction to workers and when you should use them.