/
new
/
cypress
/
node_modules
/
workerpool
/
examples
/
embeddedWorker
/
Upload File
HOME
var fs = require('fs'); var webpack = require('webpack'); var btoa = require('btoa'); var WORKER_FILE = './worker.js'; var WORKER_BUNDLE_FILE = './dist/worker.bundle.js'; var WORKER_EMBEDDED_FILE = './dist/worker.embedded.js'; create(); async function create () { try { console.log('\nWorker file ' + WORKER_FILE); await createWorkerBundle(WORKER_FILE, WORKER_BUNDLE_FILE) console.log('\nCreated worker bundle ' + WORKER_BUNDLE_FILE); createEmbeddedWorkerFromBundle(WORKER_BUNDLE_FILE, WORKER_EMBEDDED_FILE) console.log('\nCreated embedded worker ' + WORKER_EMBEDDED_FILE); } catch(err) { console.error(err); } } /** * Generate a bundle of the worker code using Webpack * @param {string} workerFile For example 'worker.js' * @param {string} workerBundleFile For example 'dist/worker.bundle.js' */ function createWorkerBundle(workerFile, workerBundleFile) { return new Promise(function (resolve, reject) { var config = { // target: 'node', // makes the worker working for node.js entry: workerFile, output: { filename: workerBundleFile, path: __dirname }, mode: 'production' }; webpack(config).run(function (err, stats) { if (err) { console.log(err); } process.stdout.write(stats.toString() + '\n'); if (stats.hasErrors()) { reject(new Error('Webpack errors:\n' + stats.toJson().errors.join('\n'))); } resolve(); }); }); } /** * Create an embedded version of the worker code: a data url. * @param {string} workerBundleFile For example 'dist/worker.bundle.js' * @param {string} workerEmbeddedFile For example 'dist/worker.embedded.js' */ function createEmbeddedWorkerFromBundle (workerBundleFile, workerEmbeddedFile) { var workerScript = String(fs.readFileSync(workerBundleFile)); var workerDataUrl = 'data:application/javascript;base64,' + btoa(workerScript); fs.writeFileSync(workerEmbeddedFile, 'module.exports = \'' + workerDataUrl + '\';\n'); }