Merge pull request #3475 from ethcore/ng-fix-parity-jsapi

Make parity.js usable by Node and Browser
This commit is contained in:
Gav Wood 2016-11-18 19:17:33 +08:00 committed by GitHub
commit d0cbbe2ec3
6 changed files with 86 additions and 7 deletions

View File

@ -43,6 +43,7 @@
"test": "mocha 'src/**/*.spec.js'", "test": "mocha 'src/**/*.spec.js'",
"test:coverage": "istanbul cover _mocha -- 'src/**/*.spec.js'", "test:coverage": "istanbul cover _mocha -- 'src/**/*.spec.js'",
"test:e2e": "mocha 'src/**/*.e2e.js'", "test:e2e": "mocha 'src/**/*.e2e.js'",
"test:npm": "(cd .npmjs && npm i) && node test/npmLibrary && (rm -rf .npmjs/node_modules)",
"prepush": "npm run lint:cached" "prepush": "npm run lint:cached"
}, },
"devDependencies": { "devDependencies": {

View File

@ -27,6 +27,7 @@
}, },
"dependencies": { "dependencies": {
"bignumber.js": "^2.3.0", "bignumber.js": "^2.3.0",
"js-sha3": "^0.5.2" "js-sha3": "^0.5.2",
"node-fetch": "^1.6.3"
} }
} }

View File

@ -14,10 +14,22 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import 'babel-polyfill/dist/polyfill.js';
import es6Promise from 'es6-promise';
es6Promise.polyfill();
const isNode = typeof global !== 'undefined' && typeof global !== 'undefined';
const isBrowser = typeof self !== 'undefined' && typeof self.window !== 'undefined';
if (isBrowser) {
require('whatwg-fetch');
}
if (isNode) {
global.fetch = require('node-fetch');
}
import Abi from './abi'; import Abi from './abi';
import Api from './api'; import Api from './api';
export { module.exports = { Api, Abi };
Abi,
Api
};

45
js/test/npmLibrary.js Normal file
View File

@ -0,0 +1,45 @@
// Copyright 2015, 2016 Ethcore (UK) Ltd.
// This file is part of Parity.
// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
try {
var Api = require('../.npmjs/library.js').Api;
var Abi = require('../.npmjs/library.js').Abi;
if (typeof Api !== 'function') {
throw new Error('No Api');
}
if (typeof Abi !== 'function') {
throw new Error('No Abi');
}
var transport = new Api.Transport.Http('http://localhost:8545');
var api = new Api(transport);
api.eth
.blockNumber()
.then((block) => {
console.log('library working fine', '(block #' + block.toFormat() + ')');
process.exit(0);
})
.catch(() => {
console.log('library working fine (disconnected)');
process.exit(0);
});
} catch (e) {
console.error('An error occured:', e.toString().split('\n')[0]);
process.exit(1);
}

View File

@ -26,6 +26,7 @@ const DEST = process.env.BUILD_DEST || '.build';
module.exports = { module.exports = {
context: path.join(__dirname, './src'), context: path.join(__dirname, './src'),
target: 'node',
entry: { entry: {
// library // library
'inject': ['./web3.js'], 'inject': ['./web3.js'],
@ -34,9 +35,18 @@ module.exports = {
}, },
output: { output: {
path: path.join(__dirname, DEST), path: path.join(__dirname, DEST),
filename: '[name].js' filename: '[name].js',
library: '[name].js',
libraryTarget: 'umd'
},
externals: {
'node-fetch': 'node-fetch',
'vertx': 'vertx'
}, },
module: { module: {
noParse: [
/babel-polyfill/
],
loaders: [ loaders: [
{ {
test: /\.js$/, test: /\.js$/,

View File

@ -24,13 +24,23 @@ const isProd = ENV === 'production';
module.exports = { module.exports = {
context: path.join(__dirname, './src'), context: path.join(__dirname, './src'),
target: 'node',
entry: 'library.js', entry: 'library.js',
output: { output: {
path: path.join(__dirname, '.npmjs'), path: path.join(__dirname, '.npmjs'),
filename: 'library.js', filename: 'library.js',
libraryTarget: 'commonjs' library: 'Parity',
libraryTarget: 'umd',
umdNamedDefine: true
},
externals: {
'node-fetch': 'node-fetch',
'vertx': 'vertx'
}, },
module: { module: {
noParse: [
/babel-polyfill/
],
loaders: [ loaders: [
{ {
test: /(\.jsx|\.js)$/, test: /(\.jsx|\.js)$/,