From 6690bd7e9dd10ad433c1ea08911b33c8d87765e9 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 5 Jul 2017 16:37:23 -0700 Subject: [PATCH] workers/webpack: fixes for build and workers. --- .babelrc | 3 +-- .gitignore | 1 + .npmignore | 2 ++ Makefile | 14 ++++++++++++- lib/workers/master.js | 4 ++-- lib/workers/workerpool.js | 25 +++++++++++----------- package.json | 13 +++++++----- webpack.browser.js | 14 ++----------- webpack.compat.js | 44 +++++++++++++++++++++++++++++++++++++++ 9 files changed, 86 insertions(+), 34 deletions(-) create mode 100644 webpack.compat.js diff --git a/.babelrc b/.babelrc index 17d01063..98664961 100644 --- a/.babelrc +++ b/.babelrc @@ -1,7 +1,6 @@ { - "presets": ["es2015"], + "presets": ["es2017", "es2016", "es2015"], "plugins": [ - ["transform-async-to-generator"], ["transform-runtime", { "polyfill": true, "regenerator": true diff --git a/.gitignore b/.gitignore index 96e6b765..2db42c4b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules/ docs/ docker_data/ browser/bcoin* +bcoin* npm-debug.log diff --git a/.npmignore b/.npmignore index 0324aed3..ffcecee3 100644 --- a/.npmignore +++ b/.npmignore @@ -5,3 +5,5 @@ docker_data/ test/ node_modules/ browser/bcoin* +bcoin* +npm-debug.log diff --git a/Makefile b/Makefile index 71225bcf..9410978c 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,18 @@ all: @npm run webpack @cp -f lib/workers/worker-browser.js browser/bcoin-worker.js +browser: + @npm run webpack-browser + @cp -f lib/workers/worker-browser.js browser/bcoin-worker.js + +compat: + @npm run webpack-compat + @cp -f lib/workers/worker-browser.js browser/bcoin-worker.js + +node: + @npm run webpack-node + @cp -f lib/workers/worker.js ./bcoin-worker.js + clean: @npm run clean @@ -14,4 +26,4 @@ lint: test: @npm test -.PHONY: all clean docs lint test +.PHONY: all browser compat node clean docs lint test diff --git a/lib/workers/master.js b/lib/workers/master.js index 0c6c9545..0797a83e 100644 --- a/lib/workers/master.js +++ b/lib/workers/master.js @@ -77,8 +77,8 @@ Master.prototype._init = function _init() { */ Master.prototype._initWebWorkers = function _initWebWorkers() { - global.onerror = (err) => { - this.emit('error', err); + global.onerror = (event) => { + this.emit('error', new Error('Master error.')); }; global.onmessage = (event) => { diff --git a/lib/workers/workerpool.js b/lib/workers/workerpool.js index 10d74745..35451396 100644 --- a/lib/workers/workerpool.js +++ b/lib/workers/workerpool.js @@ -176,7 +176,7 @@ WorkerPool.prototype.close = async function close() { */ WorkerPool.prototype.spawn = function spawn(id) { - let child = new Worker(id, this.masterURL); + let child = new Worker(id, this); child.on('error', (err) => { this.emit('error', err, child); @@ -417,24 +417,25 @@ WorkerPool.prototype.scrypt = async function scrypt(passwd, salt, N, r, p, len) * @alias module:workers.Worker * @constructor * @param {Number} id - * @param {String} masterURL + * @param {Object} options */ -function Worker(id, masterURL) { +function Worker(id, options) { if (!(this instanceof Worker)) - return new Worker(id, masterURL); + return new Worker(id, options); EventEmitter.call(this); + this.id = id; + this.options = options; + this.framer = new Framer(); this.parser = new Parser(); - - this.id = id; - this.child = null; this.pending = new Map(); + this.child = null; this.env = { - BCOIN_MASTER_URL: masterURL, + BCOIN_MASTER_URL: this.options.masterURL, BCOIN_WORKER_NETWORK: Network.type, BCOIN_WORKER_ISTTY: process.stdout ? (process.stdout.isTTY ? '1' : '0') @@ -483,10 +484,10 @@ Worker.prototype._init = function _init() { */ Worker.prototype._initWebWorkers = function _initWebWorkers() { - this.child = new global.Worker(this.workerURL); + this.child = new global.Worker(this.options.workerURL); - this.child.onerror = (err) => { - this.emit('error', err); + this.child.onerror = (event) => { + this.emit('error', new Error('Worker error.')); this.emit('exit', -1, null); }; @@ -514,7 +515,7 @@ Worker.prototype._initWebWorkers = function _initWebWorkers() { Worker.prototype._initChildProcess = function _initChildProcess() { let bin = process.argv[0]; - let file = path.resolve(__dirname, this.workerFile); + let file = path.resolve(__dirname, this.options.workerFile); let env = Object.assign({}, process.env, this.env); let options = { stdio: 'pipe', env: env }; diff --git a/package.json b/package.json index 8b080af7..11b0f079 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ }, "author": "Fedor Indutny ", "contributors": [ - "Christopher Jeffrey (https://github.com/chjj)" + "Christopher Jeffrey " ], "keywords": [ "bcoin", @@ -37,17 +37,17 @@ "devDependencies": { "babel-core": "^6.25.0", "babel-loader": "^7.1.0", - "babel-plugin-transform-async-to-generator": "^6.24.1", "babel-plugin-transform-runtime": "^6.23.0", - "babel-plugin-transform-regenerator": "^6.24.1", - "babel-polyfill": "^6.23.0", "babel-preset-es2015": "^6.24.1", + "babel-preset-es2016": "^6.24.1", + "babel-preset-es2017": "^6.24.1", "eslint": "^4.1.0", "hash.js": "^1.0.3", "jsdoc": "^3.4.3", "level-js": "^2.2.4", "mocha": "^3.4.1", "node-loader": "^0.6.0", + "uglify-es-webpack-plugin": "^0.0.2", "webpack": "^3.0.0" }, "main": "./lib/bcoin.js", @@ -58,14 +58,17 @@ "bcoin": "./bin/bcoin" }, "scripts": { - "clean": "rm browser/bcoin.js browser/bcoin-master.js browser/bcoin-worker.js", + "clean": "rm -f {browser/,}{bcoin.js,bcoin-master.js,bcoin-worker.js}", "docs": "jsdoc -c jsdoc.json", "lint": "eslint lib/ test/ migrate/ examples/ bench/ scripts/*.js bin/cli bin/node bin/spvnode || exit 0", "lint-file": "eslint", "test": "mocha --reporter spec test/*-test.js", "test-browser": "BCOIN_NO_NATIVE=1 BCOIN_NO_SECP256K1=1 mocha --reporter spec test/*-test.js", "test-file": "mocha --reporter spec", + "test-file-browser": "BCOIN_NO_NATIVE=1 BCOIN_NO_SECP256K1=1 mocha --reporter spec", "webpack": "webpack --config webpack.browser.js", + "webpack-browser": "webpack --config webpack.browser.js", + "webpack-compat": "webpack --config webpack.compat.js", "webpack-node": "webpack --config webpack.node.js" } } diff --git a/webpack.browser.js b/webpack.browser.js index 2fef0193..ad52c8ac 100644 --- a/webpack.browser.js +++ b/webpack.browser.js @@ -2,6 +2,7 @@ const webpack = require('webpack') const path = require('path'); +const UglifyEsPlugin = require('uglify-es-webpack-plugin'); const str = JSON.stringify; const env = process.env; @@ -19,13 +20,6 @@ module.exports = { modules: ['node_modules'], extensions: ['-browser.js', '.js', '.json'] }, - module: { - rules: [{ - test: /\.js$/, - exclude: /node_modules\/(?!bcoin|elliptic|bn\.js|n64)/, - loader: 'babel-loader' - }] - }, plugins: [ new webpack.DefinePlugin({ 'process.env.BCOIN_NETWORK': @@ -35,10 +29,6 @@ module.exports = { 'process.env.BCOIN_MASTER_URL': str(env.BCOIN_MASTER_URL || '/bcoin-master.js') }), - new webpack.optimize.UglifyJsPlugin({ - compress: { - warnings: false - } - }) + new UglifyEsPlugin() ] }; diff --git a/webpack.compat.js b/webpack.compat.js new file mode 100644 index 00000000..2fef0193 --- /dev/null +++ b/webpack.compat.js @@ -0,0 +1,44 @@ +'use strict'; + +const webpack = require('webpack') +const path = require('path'); +const str = JSON.stringify; +const env = process.env; + +module.exports = { + target: 'web', + entry: { + 'bcoin': './lib/bcoin-browser', + 'bcoin-master': './lib/workers/master' + }, + output: { + path: path.join(__dirname, 'browser'), + filename: '[name].js' + }, + resolve: { + modules: ['node_modules'], + extensions: ['-browser.js', '.js', '.json'] + }, + module: { + rules: [{ + test: /\.js$/, + exclude: /node_modules\/(?!bcoin|elliptic|bn\.js|n64)/, + loader: 'babel-loader' + }] + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env.BCOIN_NETWORK': + str(env.BCOIN_NETWORK || 'main'), + 'process.env.BCOIN_WORKER_URL': + str(env.BCOIN_WORKER_URL || '/bcoin-worker.js'), + 'process.env.BCOIN_MASTER_URL': + str(env.BCOIN_MASTER_URL || '/bcoin-master.js') + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + } + }) + ] +};