webpack: get bcoin building in webpack for node.
This commit is contained in:
parent
275580f4ac
commit
307e7dd698
@ -8,8 +8,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
var random = require('./random');
|
|
||||||
var secp256k1 = require('secp256k1');
|
var secp256k1 = require('secp256k1');
|
||||||
|
var random = require('./random');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @exports crypto/secp256k1
|
* @exports crypto/secp256k1
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
var native;
|
var native;
|
||||||
|
|
||||||
if (+process.env.BCOIN_USE_ELLIPTIC !== 1) {
|
if (+process.env.BCOIN_NO_SECP256K1 !== 1) {
|
||||||
try {
|
try {
|
||||||
native = require('secp256k1/bindings');
|
native = require('secp256k1/bindings');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@ -7,11 +7,19 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
exports.get = function get(name) {
|
exports.get = function get(name) {
|
||||||
if (name === 'memory')
|
|
||||||
return require('./memdb');
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return require(name);
|
switch (name) {
|
||||||
|
case 'leveldown':
|
||||||
|
return require('leveldown');
|
||||||
|
case 'rocksdown':
|
||||||
|
return require('rocksdown');
|
||||||
|
case 'lmdb':
|
||||||
|
return require('lmdb');
|
||||||
|
case 'memory':
|
||||||
|
return require('./memdb');
|
||||||
|
default:
|
||||||
|
throw new Error('Database backend "' + name + '" not found.');
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e.code === 'MODULE_NOT_FOUND')
|
if (e.code === 'MODULE_NOT_FOUND')
|
||||||
throw new Error('Database backend "' + name + '" not found.');
|
throw new Error('Database backend "' + name + '" not found.');
|
||||||
|
|||||||
@ -7,8 +7,6 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/* jshint -W069 */
|
|
||||||
|
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
var EventEmitter = require('events').EventEmitter;
|
var EventEmitter = require('events').EventEmitter;
|
||||||
var URL = require('url');
|
var URL = require('url');
|
||||||
@ -535,7 +533,8 @@ HTTPBase.prototype._initSockets = function _initSockets() {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this.io = new IOServer({
|
this.io = new IOServer({
|
||||||
transports: ['websocket']
|
transports: ['websocket'],
|
||||||
|
serveClient: false
|
||||||
});
|
});
|
||||||
|
|
||||||
this.io.attach(this.server);
|
this.io.attach(this.server);
|
||||||
|
|||||||
@ -6,8 +6,6 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/* jshint -W069 */
|
|
||||||
|
|
||||||
var Stream = require('stream').Stream;
|
var Stream = require('stream').Stream;
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
var url, qs, http, https, StringDecoder;
|
var url, qs, http, https, StringDecoder;
|
||||||
|
|||||||
@ -1 +1,3 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
exports.binding = null;
|
exports.binding = null;
|
||||||
|
|||||||
@ -7,16 +7,17 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/* jshint worker: true */
|
|
||||||
|
|
||||||
self.importScripts('/bcoin-master.js');
|
|
||||||
|
|
||||||
self.onmessage = function onmessage(event) {
|
self.onmessage = function onmessage(event) {
|
||||||
|
var file = '/bcoin-master.js';
|
||||||
var env;
|
var env;
|
||||||
|
|
||||||
self.onmessage = function() {};
|
self.onmessage = function() {};
|
||||||
|
|
||||||
env = JSON.parse(event.data);
|
env = JSON.parse(event.data);
|
||||||
|
|
||||||
|
if (env.BCOIN_MASTER_URL)
|
||||||
|
file = env.BCOIN_MASTER_URL;
|
||||||
|
|
||||||
|
self.importScripts(file);
|
||||||
self.master.listen(env);
|
self.master.listen(env);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
var EventEmitter = require('events').EventEmitter;
|
var EventEmitter = require('events').EventEmitter;
|
||||||
var os = require('os');
|
var os = require('os');
|
||||||
|
var path = require('path');
|
||||||
var cp = require('./cp');
|
var cp = require('./cp');
|
||||||
var util = require('../utils/util');
|
var util = require('../utils/util');
|
||||||
var co = require('../utils/co');
|
var co = require('../utils/co');
|
||||||
@ -18,6 +19,7 @@ var jobs = require('./jobs');
|
|||||||
var Parser = require('./parser');
|
var Parser = require('./parser');
|
||||||
var Framer = require('./framer');
|
var Framer = require('./framer');
|
||||||
var packets = require('./packets');
|
var packets = require('./packets');
|
||||||
|
|
||||||
var HAS_WORKERS = typeof global.Worker === 'function';
|
var HAS_WORKERS = typeof global.Worker === 'function';
|
||||||
var HAS_CP = typeof cp.spawn === 'function';
|
var HAS_CP = typeof cp.spawn === 'function';
|
||||||
|
|
||||||
@ -464,6 +466,7 @@ function Worker(id) {
|
|||||||
this.pending = {};
|
this.pending = {};
|
||||||
|
|
||||||
this.env = {
|
this.env = {
|
||||||
|
BCOIN_MASTER_URL: process.env.BCOIN_MASTER_URL,
|
||||||
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')
|
||||||
@ -516,8 +519,12 @@ Worker.prototype._init = function _init() {
|
|||||||
|
|
||||||
Worker.prototype._initWebWorkers = function _initWebWorkers() {
|
Worker.prototype._initWebWorkers = function _initWebWorkers() {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
var file = '/bcoin-worker.js';
|
||||||
|
|
||||||
this.child = new global.Worker('/bcoin-worker.js');
|
if (process.env.BCOIN_WORKER_URL)
|
||||||
|
file = process.env.BCOIN_WORKER_URL;
|
||||||
|
|
||||||
|
this.child = new global.Worker(file);
|
||||||
|
|
||||||
this.child.onerror = function onerror(err) {
|
this.child.onerror = function onerror(err) {
|
||||||
self.emit('error', err);
|
self.emit('error', err);
|
||||||
@ -545,12 +552,15 @@ Worker.prototype._initWebWorkers = function _initWebWorkers() {
|
|||||||
|
|
||||||
Worker.prototype._initChildProcess = function _initChildProcess() {
|
Worker.prototype._initChildProcess = function _initChildProcess() {
|
||||||
var self = this;
|
var self = this;
|
||||||
var file = process.argv[0];
|
var bin = process.argv[0];
|
||||||
var argv = [__dirname + '/worker.js'];
|
var file = path.join(__dirname, 'worker.js');
|
||||||
var env = Object.assign({}, process.env, this.env);
|
var env = Object.assign({}, process.env, this.env);
|
||||||
var options = { stdio: 'pipe', env: env };
|
var options = { stdio: 'pipe', env: env };
|
||||||
|
|
||||||
this.child = cp.spawn(file, argv, options);
|
if (process.env.BCOIN_WORKER_FILE)
|
||||||
|
file = process.env.BCOIN_WORKER_FILE;
|
||||||
|
|
||||||
|
this.child = cp.spawn(bin, [file], options);
|
||||||
|
|
||||||
this.child.unref();
|
this.child.unref();
|
||||||
this.child.stdin.unref();
|
this.child.stdin.unref();
|
||||||
@ -911,7 +921,7 @@ exports.disable = function disable() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
exports.set({
|
exports.set({
|
||||||
enabled: HAS_CP && +process.env.BCOIN_WORKERS_ENABLED !== 0,
|
enabled: +process.env.BCOIN_WORKERS_ENABLED !== 0,
|
||||||
size: +process.env.BCOIN_WORKERS_SIZE || null,
|
size: +process.env.BCOIN_WORKERS_SIZE || null,
|
||||||
timeout: +process.env.BCOIN_WORKERS_TIMEOUT || null
|
timeout: +process.env.BCOIN_WORKERS_TIMEOUT || null
|
||||||
});
|
});
|
||||||
|
|||||||
@ -47,6 +47,7 @@
|
|||||||
"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",
|
||||||
"webpack": "^3.0.0"
|
"webpack": "^3.0.0"
|
||||||
},
|
},
|
||||||
"main": "./lib/bcoin.js",
|
"main": "./lib/bcoin.js",
|
||||||
@ -62,8 +63,9 @@
|
|||||||
"lint": "eslint lib/ test/ migrate/ examples/ bench/ bin/cli bin/node bin/spvnode || exit 0",
|
"lint": "eslint lib/ test/ migrate/ examples/ bench/ 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_USE_ELLIPTIC=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",
|
||||||
"webpack": "webpack"
|
"webpack": "webpack --config webpack.browser.js",
|
||||||
|
"webpack-node": "webpack --config webpack.node.js"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
var webpack = require('webpack')
|
var webpack = require('webpack')
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
|
var str = JSON.stringify;
|
||||||
|
var env = process.env;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
target: 'web',
|
target: 'web',
|
||||||
@ -10,7 +12,7 @@ module.exports = {
|
|||||||
'bcoin-master': './lib/workers/master'
|
'bcoin-master': './lib/workers/master'
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
path: path.resolve(__dirname, 'browser'),
|
path: path.join(__dirname, 'browser'),
|
||||||
filename: '[name].js'
|
filename: '[name].js'
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
@ -20,11 +22,21 @@ module.exports = {
|
|||||||
module: {
|
module: {
|
||||||
rules: [{
|
rules: [{
|
||||||
test: /\.js$/,
|
test: /\.js$/,
|
||||||
exclude: path.resolve(__dirname, 'node_modules'),
|
exclude: path.join(__dirname, 'node_modules'),
|
||||||
loader: 'babel-loader'
|
loader: 'babel-loader'
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env.BCOIN_NETWORK':
|
||||||
|
str(env.BCOIN_NETWORK || 'main'),
|
||||||
|
'process.env.BCOIN_WORKERS_ENABLED':
|
||||||
|
str(env.BCOIN_WORKERS_ENABLED || '0'),
|
||||||
|
'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({
|
new webpack.optimize.UglifyJsPlugin({
|
||||||
compress: {
|
compress: {
|
||||||
warnings: false
|
warnings: false
|
||||||
42
webpack.node.js
Normal file
42
webpack.node.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var webpack = require('webpack')
|
||||||
|
var path = require('path');
|
||||||
|
var str = JSON.stringify;
|
||||||
|
var env = process.env;
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
target: 'node',
|
||||||
|
entry: {
|
||||||
|
'bcoin': './lib/bcoin-browser',
|
||||||
|
'bcoin-worker': './lib/workers/worker'
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
path: __dirname,
|
||||||
|
filename: '[name].js',
|
||||||
|
libraryTarget: 'commonjs2'
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
modules: ['node_modules'],
|
||||||
|
extensions: ['.node', '.js', '.json'],
|
||||||
|
alias: {
|
||||||
|
'bindings': __dirname + '/webpack/bindings.js'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
node: {
|
||||||
|
__dirname: false,
|
||||||
|
__filename: false
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [{
|
||||||
|
test: /\.node$/,
|
||||||
|
loader: 'node-loader'
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env.BCOIN_WORKER_FILE':
|
||||||
|
str(env.BCOIN_WORKER_FILE || "path.join(__dirname, 'bcoin-worker.js')")
|
||||||
|
})
|
||||||
|
]
|
||||||
|
};
|
||||||
13
webpack/bindings.js
Normal file
13
webpack/bindings.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = function bindings(name) {
|
||||||
|
switch (name) {
|
||||||
|
case 'leveldown':
|
||||||
|
return require('leveldown/build/Release/leveldown.node');
|
||||||
|
case 'bcoin-native':
|
||||||
|
return require('bcoin-native/build/Release/bcoin-native.node');
|
||||||
|
case 'secp256k1':
|
||||||
|
return require('secp256k1/build/Release/secp256k1.node');
|
||||||
|
}
|
||||||
|
throw new Error('Cannot find module "' + name + '".');
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue
Block a user