worker-pack

Create Web Workers from a single Browserify bundle

Usage no npm install needed!

<script type="module">
  import workerPack from 'https://cdn.skypack.dev/worker-pack';
</script>

README

worker-pack

A quick and dirty way of running Web Workers within a single browserified bundle.

Intended as a solution that works now, avoiding any significant tradeoffs (e.g. duplicate scripts) until the compile step doesn't need to happen anymore.

Installation

npm install worker-pack

Usage

Firstly, though worker-pack is intended for Browserify v2 it isn't packaged as a transform stream. Instead, you just have to pipe Browserify's output through the worker-pack CLI:

# Instead of this:
browserify index.js > bundle.js
# Do this:
browserify index.js | node_modules/.bin/worker-pack > bundle.js

Now you should be able to require('worker-pack') from index.js:

var pack = require('worker-pack')

if (pack.isWorker()) {
  self.onmessage = function() { self.postMessage('beep boop') }
} else {
  var worker = pack.createWorker()
  worker.onmessage = function(e) { console.log(e.data) }
  worker.postMessage()
}

If you want to use the workerstream module, you can just get a Worker URL and pass that to the stream:

var workerstream = require('workerstream')
  , pack = require('worker-pack')

if (!pack.isWorker()) {
  var worker = workerstream(pack.createWorkerURL())
}