workers/webpack: fixes for build and workers.
This commit is contained in:
parent
886008a182
commit
6690bd7e9d
3
.babelrc
3
.babelrc
@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"presets": ["es2015"],
|
"presets": ["es2017", "es2016", "es2015"],
|
||||||
"plugins": [
|
"plugins": [
|
||||||
["transform-async-to-generator"],
|
|
||||||
["transform-runtime", {
|
["transform-runtime", {
|
||||||
"polyfill": true,
|
"polyfill": true,
|
||||||
"regenerator": true
|
"regenerator": true
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,4 +2,5 @@ node_modules/
|
|||||||
docs/
|
docs/
|
||||||
docker_data/
|
docker_data/
|
||||||
browser/bcoin*
|
browser/bcoin*
|
||||||
|
bcoin*
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
|
|||||||
@ -5,3 +5,5 @@ docker_data/
|
|||||||
test/
|
test/
|
||||||
node_modules/
|
node_modules/
|
||||||
browser/bcoin*
|
browser/bcoin*
|
||||||
|
bcoin*
|
||||||
|
npm-debug.log
|
||||||
|
|||||||
14
Makefile
14
Makefile
@ -2,6 +2,18 @@ all:
|
|||||||
@npm run webpack
|
@npm run webpack
|
||||||
@cp -f lib/workers/worker-browser.js browser/bcoin-worker.js
|
@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:
|
clean:
|
||||||
@npm run clean
|
@npm run clean
|
||||||
|
|
||||||
@ -14,4 +26,4 @@ lint:
|
|||||||
test:
|
test:
|
||||||
@npm test
|
@npm test
|
||||||
|
|
||||||
.PHONY: all clean docs lint test
|
.PHONY: all browser compat node clean docs lint test
|
||||||
|
|||||||
@ -77,8 +77,8 @@ Master.prototype._init = function _init() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Master.prototype._initWebWorkers = function _initWebWorkers() {
|
Master.prototype._initWebWorkers = function _initWebWorkers() {
|
||||||
global.onerror = (err) => {
|
global.onerror = (event) => {
|
||||||
this.emit('error', err);
|
this.emit('error', new Error('Master error.'));
|
||||||
};
|
};
|
||||||
|
|
||||||
global.onmessage = (event) => {
|
global.onmessage = (event) => {
|
||||||
|
|||||||
@ -176,7 +176,7 @@ WorkerPool.prototype.close = async function close() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
WorkerPool.prototype.spawn = function spawn(id) {
|
WorkerPool.prototype.spawn = function spawn(id) {
|
||||||
let child = new Worker(id, this.masterURL);
|
let child = new Worker(id, this);
|
||||||
|
|
||||||
child.on('error', (err) => {
|
child.on('error', (err) => {
|
||||||
this.emit('error', err, child);
|
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
|
* @alias module:workers.Worker
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {Number} id
|
* @param {Number} id
|
||||||
* @param {String} masterURL
|
* @param {Object} options
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function Worker(id, masterURL) {
|
function Worker(id, options) {
|
||||||
if (!(this instanceof Worker))
|
if (!(this instanceof Worker))
|
||||||
return new Worker(id, masterURL);
|
return new Worker(id, options);
|
||||||
|
|
||||||
EventEmitter.call(this);
|
EventEmitter.call(this);
|
||||||
|
|
||||||
|
this.id = id;
|
||||||
|
this.options = options;
|
||||||
|
|
||||||
this.framer = new Framer();
|
this.framer = new Framer();
|
||||||
this.parser = new Parser();
|
this.parser = new Parser();
|
||||||
|
|
||||||
this.id = id;
|
|
||||||
this.child = null;
|
|
||||||
this.pending = new Map();
|
this.pending = new Map();
|
||||||
|
this.child = null;
|
||||||
|
|
||||||
this.env = {
|
this.env = {
|
||||||
BCOIN_MASTER_URL: masterURL,
|
BCOIN_MASTER_URL: this.options.masterURL,
|
||||||
BCOIN_WORKER_NETWORK: Network.type,
|
BCOIN_WORKER_NETWORK: Network.type,
|
||||||
BCOIN_WORKER_ISTTY: process.stdout
|
BCOIN_WORKER_ISTTY: process.stdout
|
||||||
? (process.stdout.isTTY ? '1' : '0')
|
? (process.stdout.isTTY ? '1' : '0')
|
||||||
@ -483,10 +484,10 @@ Worker.prototype._init = function _init() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Worker.prototype._initWebWorkers = function _initWebWorkers() {
|
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.child.onerror = (event) => {
|
||||||
this.emit('error', err);
|
this.emit('error', new Error('Worker error.'));
|
||||||
this.emit('exit', -1, null);
|
this.emit('exit', -1, null);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -514,7 +515,7 @@ Worker.prototype._initWebWorkers = function _initWebWorkers() {
|
|||||||
|
|
||||||
Worker.prototype._initChildProcess = function _initChildProcess() {
|
Worker.prototype._initChildProcess = function _initChildProcess() {
|
||||||
let bin = process.argv[0];
|
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 env = Object.assign({}, process.env, this.env);
|
||||||
let options = { stdio: 'pipe', env: env };
|
let options = { stdio: 'pipe', env: env };
|
||||||
|
|
||||||
|
|||||||
13
package.json
13
package.json
@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"author": "Fedor Indutny <fedor@indutny.com>",
|
"author": "Fedor Indutny <fedor@indutny.com>",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
"Christopher Jeffrey <chjjeffrey@gmail.com> (https://github.com/chjj)"
|
"Christopher Jeffrey <chjjeffrey@gmail.com>"
|
||||||
],
|
],
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"bcoin",
|
"bcoin",
|
||||||
@ -37,17 +37,17 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-core": "^6.25.0",
|
"babel-core": "^6.25.0",
|
||||||
"babel-loader": "^7.1.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-runtime": "^6.23.0",
|
||||||
"babel-plugin-transform-regenerator": "^6.24.1",
|
|
||||||
"babel-polyfill": "^6.23.0",
|
|
||||||
"babel-preset-es2015": "^6.24.1",
|
"babel-preset-es2015": "^6.24.1",
|
||||||
|
"babel-preset-es2016": "^6.24.1",
|
||||||
|
"babel-preset-es2017": "^6.24.1",
|
||||||
"eslint": "^4.1.0",
|
"eslint": "^4.1.0",
|
||||||
"hash.js": "^1.0.3",
|
"hash.js": "^1.0.3",
|
||||||
"jsdoc": "^3.4.3",
|
"jsdoc": "^3.4.3",
|
||||||
"level-js": "^2.2.4",
|
"level-js": "^2.2.4",
|
||||||
"mocha": "^3.4.1",
|
"mocha": "^3.4.1",
|
||||||
"node-loader": "^0.6.0",
|
"node-loader": "^0.6.0",
|
||||||
|
"uglify-es-webpack-plugin": "^0.0.2",
|
||||||
"webpack": "^3.0.0"
|
"webpack": "^3.0.0"
|
||||||
},
|
},
|
||||||
"main": "./lib/bcoin.js",
|
"main": "./lib/bcoin.js",
|
||||||
@ -58,14 +58,17 @@
|
|||||||
"bcoin": "./bin/bcoin"
|
"bcoin": "./bin/bcoin"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"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",
|
"docs": "jsdoc -c jsdoc.json",
|
||||||
"lint": "eslint lib/ test/ migrate/ examples/ bench/ scripts/*.js bin/cli bin/node bin/spvnode || exit 0",
|
"lint": "eslint lib/ test/ migrate/ examples/ bench/ scripts/*.js bin/cli bin/node bin/spvnode || exit 0",
|
||||||
"lint-file": "eslint",
|
"lint-file": "eslint",
|
||||||
"test": "mocha --reporter spec test/*-test.js",
|
"test": "mocha --reporter spec test/*-test.js",
|
||||||
"test-browser": "BCOIN_NO_NATIVE=1 BCOIN_NO_SECP256K1=1 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": "mocha --reporter spec",
|
||||||
|
"test-file-browser": "BCOIN_NO_NATIVE=1 BCOIN_NO_SECP256K1=1 mocha --reporter spec",
|
||||||
"webpack": "webpack --config webpack.browser.js",
|
"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"
|
"webpack-node": "webpack --config webpack.node.js"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const webpack = require('webpack')
|
const webpack = require('webpack')
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const UglifyEsPlugin = require('uglify-es-webpack-plugin');
|
||||||
const str = JSON.stringify;
|
const str = JSON.stringify;
|
||||||
const env = process.env;
|
const env = process.env;
|
||||||
|
|
||||||
@ -19,13 +20,6 @@ module.exports = {
|
|||||||
modules: ['node_modules'],
|
modules: ['node_modules'],
|
||||||
extensions: ['-browser.js', '.js', '.json']
|
extensions: ['-browser.js', '.js', '.json']
|
||||||
},
|
},
|
||||||
module: {
|
|
||||||
rules: [{
|
|
||||||
test: /\.js$/,
|
|
||||||
exclude: /node_modules\/(?!bcoin|elliptic|bn\.js|n64)/,
|
|
||||||
loader: 'babel-loader'
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.DefinePlugin({
|
new webpack.DefinePlugin({
|
||||||
'process.env.BCOIN_NETWORK':
|
'process.env.BCOIN_NETWORK':
|
||||||
@ -35,10 +29,6 @@ module.exports = {
|
|||||||
'process.env.BCOIN_MASTER_URL':
|
'process.env.BCOIN_MASTER_URL':
|
||||||
str(env.BCOIN_MASTER_URL || '/bcoin-master.js')
|
str(env.BCOIN_MASTER_URL || '/bcoin-master.js')
|
||||||
}),
|
}),
|
||||||
new webpack.optimize.UglifyJsPlugin({
|
new UglifyEsPlugin()
|
||||||
compress: {
|
|
||||||
warnings: false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|||||||
44
webpack.compat.js
Normal file
44
webpack.compat.js
Normal 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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
]
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue
Block a user