threads-loader

threads worker loader module for webpack

Usage no npm install needed!

<script type="module">
  import threadsLoader from 'https://cdn.skypack.dev/threads-loader';
</script>

README

threads-loader

threads worker loader module for webpack

Requirements

This module requires a minimum of Node v6.9.0 and Webpack v4.0.0.

** MUST USE THE @jc-lab/threads PACKAGE**

Getting Started

To begin, you'll need to install threads-loader:

$ npm install threads-loader --save-dev

Inlined

// App.js
import Worker from 'threads-loader!./Worker.js';
const worker = new Worker();

OR

const worker = (() => {
    if(typeof __webpack_require__ === 'function') {
            return require('threads-loader!./Worker.js')();
        }else{
            return new Worker('./Worker.js');
        }
})();

Config

// webpack.config.js
{
  module: {
    rules: [
      {
        test: /\.thread\.js$/,
        use: { loader: 'threads-loader' }
      },
      {
        test: /\.thread\.ts$/,
        use: [
            { loader: 'ts-loader' },
            { loader: 'threads-loader' }
        ]
      }
    ]
  }
}
// App.js
import { spawn, Worker } from '@jc-lab/threads';
import MyWorker from 'threads-loader!./Worker.js';
const instance = await spawn((() => {
                                 if(typeof __webpack_require__ === 'function') {
                                         return new MyWorker();
                                     }else{
                                         return new Worker('./Worker.js');
                                     }
                             })());
...

And run webpack via your preferred method.

Options

name

Type: String Default: [hash].thread.js

To set a custom name for the output script, use the name parameter. The name may contain the string [hash], which will be replaced with a content dependent hash for caching purposes. When using name alone [hash] is omitted.

// webpack.config.js
{
  loader: 'threads-loader',
  options: { name: 'WorkerName.[hash].js' }
}

publicPath

Type: String Default: null

Overrides the path from which worker scripts are downloaded. If not specified, the same public path used for other webpack assets is used.

// webpack.config.js
{
  loader: 'threads-loader',
  options: { publicPath: '/scripts/workers/' }
}

inline

Type: boolean Default: false

You can also inline the worker as a BLOB with the inline parameter.

(If you are in a node environment, the eval option of worker_threads is used)

// webpack.config.js
{
  loader: 'threads-loader',
  options: { inline: true }
}

OR

require('threads-loader?inline=true!./Worker.js');

Integrating with TypeScript

To integrate with TypeScript, you will need to define a custom module for the exports of your worker

// typings/custom.d.ts
declare module "threads-loader!*" {
  import WebpackThreadsWorker from 'threads-loader/types'
  export default WebpackThreadsWorker;
}

License

MIT

Thanks for worker-loader

threads-loader is built on the code of worker-loader.