workers/webpack: fixes for build and workers.

This commit is contained in:
Christopher Jeffrey 2017-07-05 16:37:23 -07:00
parent 886008a182
commit 6690bd7e9d
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
9 changed files with 86 additions and 34 deletions

View File

@ -1,7 +1,6 @@
{
"presets": ["es2015"],
"presets": ["es2017", "es2016", "es2015"],
"plugins": [
["transform-async-to-generator"],
["transform-runtime", {
"polyfill": true,
"regenerator": true

1
.gitignore vendored
View File

@ -2,4 +2,5 @@ node_modules/
docs/
docker_data/
browser/bcoin*
bcoin*
npm-debug.log

View File

@ -5,3 +5,5 @@ docker_data/
test/
node_modules/
browser/bcoin*
bcoin*
npm-debug.log

View File

@ -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

View File

@ -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) => {

View File

@ -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 };

View File

@ -10,7 +10,7 @@
},
"author": "Fedor Indutny <fedor@indutny.com>",
"contributors": [
"Christopher Jeffrey <chjjeffrey@gmail.com> (https://github.com/chjj)"
"Christopher Jeffrey <chjjeffrey@gmail.com>"
],
"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"
}
}

View File

@ -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()
]
};

44
webpack.compat.js Normal file
View File

@ -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
}
})
]
};