🏗️ Automatically move a module into a Web Worker (Webpack loader)
JavaScript
Latest commit 3077834 Jan 14, 2018 @developit developit hopefully fix CI
Permalink
Failed to load latest commit information.
src Initial commit! Jan 9, 2018
test Initial commit! Jan 9, 2018
.editorconfig Initial commit! Jan 9, 2018
.gitignore Initial commit! Jan 9, 2018
.travis.yml hopefully fix CI Jan 14, 2018
LICENSE.md Create LICENSE.md Jan 10, 2018
README.md Add credit! Jan 13, 2018
package.json chore(package): update microbundle to version 0.3.0 Jan 13, 2018

README.md

workerize-loader

workerize-loader npm travis

A webpack loader that moves a module and its dependencies into a Web Worker, automatically reflecting exported functions as asynchronous proxies.

  • Bundles a tiny, purpose-built RPC implementation into your app
  • If exported module methods are already async, signature is unchanged
  • Supports synchronous and asynchronous worker functions
  • Works beautifully with async/await
  • Imported value is instantiable, just a decorated Worker

Install

npm install -D workerize-loader

Usage

worker.js:

// block for `time` ms, then return the number of loops we could run in that time:
export function expensive(time) {
	let start = Date.now(),
		count = 0
	while (Date.now() - start < time) count++
	return count
}

index.js: (our demo)

import worker from 'workerize-loader!./worker'

let instance = worker()  // `new` is optional

instance.expensive(1000).then( count => {
	console.log(`Ran ${count} loops`)
})

Credit

The inner workings here are heavily inspired by worker-loader. It's worth a read!

License

MIT License © Jason Miller