Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/surma/rollup-plugin-off-main-thread
Use Rollup with workers and ES6 modules today.
https://github.com/surma/rollup-plugin-off-main-thread
Last synced: about 20 hours ago
JSON representation
Use Rollup with workers and ES6 modules today.
- Host: GitHub
- URL: https://github.com/surma/rollup-plugin-off-main-thread
- Owner: surma
- License: apache-2.0
- Created: 2019-07-18T13:54:24.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-09-27T06:02:31.000Z (3 months ago)
- Last Synced: 2024-11-27T18:07:57.722Z (15 days ago)
- Language: JavaScript
- Size: 239 KB
- Stars: 308
- Watchers: 5
- Forks: 32
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
- awesome-list - rollup-plugin-off-main-thread
- awesome - off-main-thread - Use ES6 modules with Web Workers. (Plugins / Workflow)
README
# rollup-plugin-off-main-thread
Use Rollup with workers and ES6 modules _today_.
```
$ npm install --save @surma/rollup-plugin-off-main-thread
```Workers are JavaScript’s version of threads. [Workers are important to use][when workers] as the main thread is already overloaded, especially on slower or older devices.
This plugin takes care of shimming module support in workers and allows you to use `new Worker()`.
OMT is the result of merging loadz0r and workz0r.
## Usage
I set up [a gist] to show a full setup with OMT.
### Config
```js
// rollup.config.js
import OMT from "@surma/rollup-plugin-off-main-thread";export default {
input: ["src/main.js"],
output: {
dir: "dist",
// You _must_ use either “amd” or “esm” as your format.
// But note that only very few browsers have native support for
// modules in workers.
format: "amd"
},
plugins: [OMT()]
};
```### Auto bundling
In your project's code use a module-relative path via `new URL` to include a Worker:
```js
const worker = new Worker(new URL("worker.js", import.meta.url), {
type: "module"
});
```This will just work.
If required, the plugin also supports plain literal paths:
```js
const worker = new Worker("./worker.js", { type: "module" });
```However, those are less portable: in Rollup they would result in module-relative
path, but if used directly in the browser, they'll be relative to the document
URL instead.Hence, they're deprecated and `new URL` pattern is encouraged instead for portability.
### Importing workers as URLs
If your worker constructor doesn't match `workerRegexp` (see options below), you might find it easier to import the worker as a URL. In your project's code:
```js
import workerURL from "omt:./worker.js";
import paintWorkletURL from "omt:./paint-worklet.js";const worker = new Worker(workerURL, { name: "main-worker" });
CSS.paintWorklet.addModule(paintWorkletURL);
````./worker.js` and `./paint-worklet.js` will be added to the output as chunks.
## Options
```js
{
// ...
plugins: [OMT(options)];
}
```- `loader`: A string containing the EJS template for the amd loader. If `undefined`, OMT will use `loader.ejs`.
- `useEval`: Use `fetch()` + `eval()` to load dependencies instead of `` tags and `importScripts()`. _This is not CSP compliant, but is required if you want to use dynamic imports in ServiceWorker_.
- `workerRegexp`: A RegExp to find `new Workers()` calls. The second capture group _must_ capture the provided file name without the quotes.
- `amdFunctionName`: Function name to use instead of AMD’s `define`.
- `prependLoader`: A function that determines whether the loader code should be prepended to a certain chunk. Should return true if the load is suppsoed to be prepended.
- `urlLoaderScheme`: Scheme to use when importing workers as URLs. If `undefined`, OMT will use `"omt"`.[when workers]: https://dassur.ma/things/when-workers
[a gist]: https://gist.github.com/surma/a02db7b53eb3e7870bf539b906ff6ff6---
License Apache-2.0