webpack: get bcoin building in webpack for node.
This commit is contained in:
parent
275580f4ac
commit
307e7dd698
@ -8,8 +8,8 @@
|
||||
'use strict';
|
||||
|
||||
var assert = require('assert');
|
||||
var random = require('./random');
|
||||
var secp256k1 = require('secp256k1');
|
||||
var random = require('./random');
|
||||
|
||||
/**
|
||||
* @exports crypto/secp256k1
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
var native;
|
||||
|
||||
if (+process.env.BCOIN_USE_ELLIPTIC !== 1) {
|
||||
if (+process.env.BCOIN_NO_SECP256K1 !== 1) {
|
||||
try {
|
||||
native = require('secp256k1/bindings');
|
||||
} catch (e) {
|
||||
|
||||
@ -7,11 +7,19 @@
|
||||
'use strict';
|
||||
|
||||
exports.get = function get(name) {
|
||||
if (name === 'memory')
|
||||
return require('./memdb');
|
||||
|
||||
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) {
|
||||
if (e.code === 'MODULE_NOT_FOUND')
|
||||
throw new Error('Database backend "' + name + '" not found.');
|
||||
|
||||
@ -7,8 +7,6 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
/* jshint -W069 */
|
||||
|
||||
var assert = require('assert');
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var URL = require('url');
|
||||
@ -535,7 +533,8 @@ HTTPBase.prototype._initSockets = function _initSockets() {
|
||||
return;
|
||||
|
||||
this.io = new IOServer({
|
||||
transports: ['websocket']
|
||||
transports: ['websocket'],
|
||||
serveClient: false
|
||||
});
|
||||
|
||||
this.io.attach(this.server);
|
||||
|
||||
@ -6,8 +6,6 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
/* jshint -W069 */
|
||||
|
||||
var Stream = require('stream').Stream;
|
||||
var assert = require('assert');
|
||||
var url, qs, http, https, StringDecoder;
|
||||
|
||||
@ -1 +1,3 @@
|
||||
'use strict';
|
||||
|
||||
exports.binding = null;
|
||||
|
||||
@ -7,16 +7,17 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
/* jshint worker: true */
|
||||
|
||||
self.importScripts('/bcoin-master.js');
|
||||
|
||||
self.onmessage = function onmessage(event) {
|
||||
var file = '/bcoin-master.js';
|
||||
var env;
|
||||
|
||||
self.onmessage = function() {};
|
||||
|
||||
env = JSON.parse(event.data);
|
||||
|
||||
if (env.BCOIN_MASTER_URL)
|
||||
file = env.BCOIN_MASTER_URL;
|
||||
|
||||
self.importScripts(file);
|
||||
self.master.listen(env);
|
||||
};
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
var assert = require('assert');
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var os = require('os');
|
||||
var path = require('path');
|
||||
var cp = require('./cp');
|
||||
var util = require('../utils/util');
|
||||
var co = require('../utils/co');
|
||||
@ -18,6 +19,7 @@ var jobs = require('./jobs');
|
||||
var Parser = require('./parser');
|
||||
var Framer = require('./framer');
|
||||
var packets = require('./packets');
|
||||
|
||||
var HAS_WORKERS = typeof global.Worker === 'function';
|
||||
var HAS_CP = typeof cp.spawn === 'function';
|
||||
|
||||
@ -464,6 +466,7 @@ function Worker(id) {
|
||||
this.pending = {};
|
||||
|
||||
this.env = {
|
||||
BCOIN_MASTER_URL: process.env.BCOIN_MASTER_URL,
|
||||
BCOIN_WORKER_NETWORK: Network.type,
|
||||
BCOIN_WORKER_ISTTY: process.stdout
|
||||
? (process.stdout.isTTY ? '1' : '0')
|
||||
@ -516,8 +519,12 @@ Worker.prototype._init = function _init() {
|
||||
|
||||
Worker.prototype._initWebWorkers = function _initWebWorkers() {
|
||||
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) {
|
||||
self.emit('error', err);
|
||||
@ -545,12 +552,15 @@ Worker.prototype._initWebWorkers = function _initWebWorkers() {
|
||||
|
||||
Worker.prototype._initChildProcess = function _initChildProcess() {
|
||||
var self = this;
|
||||
var file = process.argv[0];
|
||||
var argv = [__dirname + '/worker.js'];
|
||||
var bin = process.argv[0];
|
||||
var file = path.join(__dirname, 'worker.js');
|
||||
var env = Object.assign({}, process.env, this.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.stdin.unref();
|
||||
@ -911,7 +921,7 @@ exports.disable = function disable() {
|
||||
};
|
||||
|
||||
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,
|
||||
timeout: +process.env.BCOIN_WORKERS_TIMEOUT || null
|
||||
});
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"jsdoc": "^3.4.3",
|
||||
"level-js": "^2.2.4",
|
||||
"mocha": "^3.4.1",
|
||||
"node-loader": "^0.6.0",
|
||||
"webpack": "^3.0.0"
|
||||
},
|
||||
"main": "./lib/bcoin.js",
|
||||
@ -62,8 +63,9 @@
|
||||
"lint": "eslint lib/ test/ migrate/ examples/ bench/ 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_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",
|
||||
"webpack": "webpack"
|
||||
"webpack": "webpack --config webpack.browser.js",
|
||||
"webpack-node": "webpack --config webpack.node.js"
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
var webpack = require('webpack')
|
||||
var path = require('path');
|
||||
var str = JSON.stringify;
|
||||
var env = process.env;
|
||||
|
||||
module.exports = {
|
||||
target: 'web',
|
||||
@ -10,7 +12,7 @@ module.exports = {
|
||||
'bcoin-master': './lib/workers/master'
|
||||
},
|
||||
output: {
|
||||
path: path.resolve(__dirname, 'browser'),
|
||||
path: path.join(__dirname, 'browser'),
|
||||
filename: '[name].js'
|
||||
},
|
||||
resolve: {
|
||||
@ -20,11 +22,21 @@ module.exports = {
|
||||
module: {
|
||||
rules: [{
|
||||
test: /\.js$/,
|
||||
exclude: path.resolve(__dirname, 'node_modules'),
|
||||
exclude: path.join(__dirname, 'node_modules'),
|
||||
loader: 'babel-loader'
|
||||
}]
|
||||
},
|
||||
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({
|
||||
compress: {
|
||||
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