Build update

This commit is contained in:
Jaco Greeff 2017-08-01 08:02:28 +02:00
parent 0e7c115b73
commit 317a59d550
3 changed files with 264 additions and 258 deletions

View File

@ -27,16 +27,16 @@
], ],
"scripts": { "scripts": {
"build": "npm run build:lib && npm run build:app", "build": "npm run build:lib && npm run build:app",
"build:app": "webpack --config webpack/app", "build:app": "parallel-webpack -p=2 --config webpack/app",
"build:lib": "webpack --config webpack/libraries", "build:lib": "parallel-webpack -p=2 --config webpack/libraries",
"build:markdown": "babel-node ./scripts/build-rpc-markdown.js", "build:markdown": "babel-node ./scripts/build-rpc-markdown.js",
"build:json": "babel-node ./scripts/build-rpc-json.js", "build:json": "babel-node ./scripts/build-rpc-json.js",
"build:embed": "EMBED=1 node webpack/embed", "build:embed": "EMBED=1 node webpack/embed",
"build:i18n": "npm run clean && npm run build && babel-node ./scripts/build-i18n.js", "build:i18n": "npm run clean && npm run build && babel-node ./scripts/build-i18n.js",
"ci:build": "npm run ci:build:lib && npm run ci:build:app && npm run ci:build:embed", "ci:build": "npm run ci:build:lib && npm run ci:build:app && npm run ci:build:embed",
"ci:build:app": "NODE_ENV=production webpack --config webpack/app", "ci:build:app": "NODE_ENV=production parallel-webpack -p=2 --config webpack/app",
"ci:build:lib": "NODE_ENV=production webpack --config webpack/libraries", "ci:build:lib": "NODE_ENV=production parallel-webpack -p=2 --config webpack/libraries",
"ci:build:npm": "NODE_ENV=production webpack --config webpack/npm", "ci:build:npm": "NODE_ENV=production parallel-webpack -p=2 --config webpack/npm",
"ci:build:jsonrpc": "babel-node ./scripts/build-rpc-json.js --output .npmjs/jsonrpc", "ci:build:jsonrpc": "babel-node ./scripts/build-rpc-json.js --output .npmjs/jsonrpc",
"ci:build:embed": "NODE_ENV=production EMBED=1 node webpack/embed", "ci:build:embed": "NODE_ENV=production EMBED=1 node webpack/embed",
"clean": "rm -rf ./.build ./.coverage ./.happypack ./build ./node_modules/.cache", "clean": "rm -rf ./.build ./.coverage ./.happypack ./build ./node_modules/.cache",

View File

@ -49,218 +49,224 @@ const entry = isEmbed
index: './index.js' index: './index.js'
}); });
module.exports = { module.exports = Object.keys(entry).map((entryName) => {
cache: !isProd, const entrySrc = entry[entryName];
devtool: isProd ? '#hidden-source-map' : '#source-map',
context: path.join(__dirname, '../src'), return {
entry, cache: !isProd,
output: { devtool: isProd ? '#hidden-source-map' : '#source-map',
path: path.join(__dirname, '../', DEST),
filename: '[name].js'
},
module: { context: path.join(__dirname, '../src'),
rules: [ entry: {
rulesParity, [entryName]: entrySrc
rulesEs6, },
{ output: {
test: /\.js$/, path: path.join(__dirname, '../', DEST),
exclude: /(node_modules)/, filename: '[name].js'
use: [ 'babel-loader' ] },
},
{ module: {
test: /\.json$/, rules: [
use: [ 'json-loader' ] rulesParity,
}, rulesEs6,
{ {
test: /\.ejs$/, test: /\.js$/,
use: [ 'ejs-loader' ] exclude: /(node_modules)/,
}, use: [ 'babel-loader' ]
{ },
test: /\.html$/, {
use: [ test: /\.json$/,
{ use: [ 'json-loader' ]
},
{
test: /\.ejs$/,
use: [ 'ejs-loader' ]
},
{
test: /\.html$/,
use: [
{
loader: 'file-loader',
options: {
name: '[name].[ext]'
}
},
'extract-loader',
{
loader: 'html-loader',
options: {
root: path.resolve(__dirname, '../assets/images'),
attrs: ['img:src', 'link:href']
}
}
]
},
{
test: /\.md$/,
use: [ 'html-loader', 'markdown-loader' ]
},
{
test: /\.css$/,
include: /node_modules\/(?!@parity)*/,
use: [ 'style-loader', 'css-loader' ]
},
{
test: /\.css$/,
exclude: /node_modules\/(?!@parity)*/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 1,
localIdentName: '[name]_[local]_[hash:base64:10]',
minimize: true,
modules: true
}
},
{
loader: 'postcss-loader',
options: {
plugins: (loader) => [
require('postcss-import'),
require('postcss-nested'),
require('postcss-simple-vars')
]
}
}
]
},
{
test: /\.(png|jpg)$/,
use: [ {
loader: 'file-loader', loader: 'file-loader',
options: { options: {
name: '[name].[ext]' name: 'assets/[name].[hash].[ext]'
} }
}, } ]
'extract-loader', },
{ {
loader: 'html-loader', test: /\.(woff|woff2|ttf|eot|otf)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: [ {
loader: 'file-loader',
options: { options: {
root: path.resolve(__dirname, '../assets/images'), name: 'fonts/[name][hash].[ext]'
attrs: ['img:src', 'link:href']
} }
} } ]
] },
}, {
{ test: /parity-logo-white-no-text\.svg/,
test: /\.md$/, use: [ 'url-loader' ]
use: [ 'html-loader', 'markdown-loader' ] },
}, {
{ test: /\.svg(\?v=[0-9]\.[0-9]\.[0-9])?$/,
test: /\.css$/, exclude: [ /parity-logo-white-no-text\.svg/ ],
include: /node_modules\/(?!@parity)*/, use: [ {
use: [ 'style-loader', 'css-loader' ] loader: 'file-loader',
},
{
test: /\.css$/,
exclude: /node_modules\/(?!@parity)*/,
use: [
'style-loader',
{
loader: 'css-loader',
options: { options: {
importLoaders: 1, name: 'assets/[name].[hash].[ext]'
localIdentName: '[name]_[local]_[hash:base64:10]',
minimize: true,
modules: true
} }
}, } ]
{ }
loader: 'postcss-loader', ],
options: { noParse: [
plugins: (loader) => [ /node_modules\/sinon/
require('postcss-import'), ]
require('postcss-nested'),
require('postcss-simple-vars')
]
}
}
]
},
{
test: /\.(png|jpg)$/,
use: [ {
loader: 'file-loader',
options: {
name: 'assets/[name].[hash].[ext]'
}
} ]
},
{
test: /\.(woff|woff2|ttf|eot|otf)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: [ {
loader: 'file-loader',
options: {
name: 'fonts/[name][hash].[ext]'
}
} ]
},
{
test: /parity-logo-white-no-text\.svg/,
use: [ 'url-loader' ]
},
{
test: /\.svg(\?v=[0-9]\.[0-9]\.[0-9])?$/,
exclude: [ /parity-logo-white-no-text\.svg/ ],
use: [ {
loader: 'file-loader',
options: {
name: 'assets/[name].[hash].[ext]'
}
} ]
}
],
noParse: [
/node_modules\/sinon/
]
},
resolve: {
alias: {
'~': path.resolve(__dirname, '..'),
'@parity/abi': path.resolve(__dirname, '../node_modules/@parity/abi'),
'@parity/api': path.resolve(__dirname, '../node_modules/@parity/api'),
'@parity/etherscan': path.resolve(__dirname, '../node_modules/@parity/etherscan'),
'@parity/jsonrpc': path.resolve(__dirname, '../node_modules/@parity/jsonrpc'),
'@parity/parity.js': path.resolve(__dirname, '../node_modules/@parity/parity.js'),
'@parity/shared': path.resolve(__dirname, '../node_modules/@parity/shared'),
'@parity/ui': path.resolve(__dirname, '../node_modules/@parity/ui'),
'@parity/wordlist': path.resolve(__dirname, '../node_modules/@parity/wordlist'),
'@parity': path.resolve(__dirname, '../packages')
}, },
modules: [
path.join(__dirname, '../node_modules')
],
extensions: ['.json', '.js', '.jsx'],
unsafeCache: true
},
node: { resolve: {
fs: 'empty' alias: {
}, '~': path.resolve(__dirname, '..'),
'@parity/abi': path.resolve(__dirname, '../node_modules/@parity/abi'),
'@parity/api': path.resolve(__dirname, '../node_modules/@parity/api'),
'@parity/etherscan': path.resolve(__dirname, '../node_modules/@parity/etherscan'),
'@parity/jsonrpc': path.resolve(__dirname, '../node_modules/@parity/jsonrpc'),
'@parity/parity.js': path.resolve(__dirname, '../node_modules/@parity/parity.js'),
'@parity/shared': path.resolve(__dirname, '../node_modules/@parity/shared'),
'@parity/ui': path.resolve(__dirname, '../node_modules/@parity/ui'),
'@parity/wordlist': path.resolve(__dirname, '../node_modules/@parity/wordlist'),
'@parity': path.resolve(__dirname, '../packages')
},
modules: [
path.join(__dirname, '../node_modules')
],
extensions: ['.json', '.js', '.jsx'],
unsafeCache: true
},
plugins: (function () { node: {
const DappsHTMLInjection = [] fs: 'empty'
.concat(DAPPS_BUILTIN, DAPPS_VIEWS) },
.filter((dapp) => !dapp.skipBuild)
.map((dapp) => { plugins: (function () {
return new HtmlWebpackPlugin({ const DappsHTMLInjection = []
title: dapp.name, .concat(DAPPS_BUILTIN, DAPPS_VIEWS)
filename: dapp.url + '.html', .filter((dapp) => !dapp.skipBuild)
template: '../packages/dapps/index.ejs', .map((dapp) => {
favicon: FAVICON, return new HtmlWebpackPlugin({
secure: dapp.secure, title: dapp.name,
chunks: [ dapp.url ] filename: dapp.url + '.html',
template: '../packages/dapps/index.ejs',
favicon: FAVICON,
secure: dapp.secure,
chunks: [ dapp.url ]
});
}); });
});
let plugins = Shared.getPlugins().concat( let plugins = Shared.getPlugins().concat(
new WebpackErrorNotificationPlugin() new WebpackErrorNotificationPlugin()
);
if (!isEmbed) {
plugins = [].concat(
plugins,
new HtmlWebpackPlugin({
title: 'Parity',
filename: 'index.html',
template: './index.ejs',
favicon: FAVICON,
chunks: [ 'index' ]
}),
new ServiceWorkerWebpackPlugin({
entry: path.join(__dirname, '../src/serviceWorker.js')
}),
DappsHTMLInjection,
new CopyWebpackPlugin([
{ from: './error_pages.css', to: 'styles.css' },
{ from: '../packages/dapps/static' }
], {})
); );
}
if (isEmbed) { if (!isEmbed) {
plugins.push( plugins = [].concat(
new HtmlWebpackPlugin({ plugins,
title: 'Parity Bar',
filename: 'embed.html',
template: './index.ejs',
favicon: FAVICON,
chunks: [ 'embed' ]
})
);
}
// if (!isAnalize && !isProd) { new HtmlWebpackPlugin({
// const DEST_I18N = path.join(__dirname, '..', DEST, 'i18n'); title: 'Parity',
// filename: 'index.html',
// plugins.push( template: './index.ejs',
// new ReactIntlAggregatePlugin({ favicon: FAVICON,
// messagesPattern: DEST_I18N + '/i18n/**/*.json', chunks: [ 'index' ]
// aggregateOutputDir: DEST_I18N + '/i18n/', }),
// aggregateFilename: 'en'
// })
// );
// }
return plugins; new ServiceWorkerWebpackPlugin({
}()) entry: path.join(__dirname, '../src/serviceWorker.js')
}; }),
DappsHTMLInjection,
new CopyWebpackPlugin([
{ from: './error_pages.css', to: 'styles.css' },
{ from: '../packages/dapps/static' }
], {})
);
}
if (isEmbed) {
plugins.push(
new HtmlWebpackPlugin({
title: 'Parity Bar',
filename: 'embed.html',
template: './index.ejs',
favicon: FAVICON,
chunks: [ 'embed' ]
})
);
}
// if (!isAnalize && !isProd) {
// const DEST_I18N = path.join(__dirname, '..', DEST, 'i18n');
//
// plugins.push(
// new ReactIntlAggregatePlugin({
// messagesPattern: DEST_I18N + '/i18n/**/*.json',
// aggregateOutputDir: DEST_I18N + '/i18n/',
// aggregateFilename: 'en'
// })
// );
// }
return plugins;
}())
};
});

View File

@ -24,61 +24,61 @@ const Shared = require('./shared');
const DEST = process.env.BUILD_DEST || '.build'; const DEST = process.env.BUILD_DEST || '.build';
module.exports = { module.exports = ['inject', 'parity', 'web3'].map((entryName) => {
context: path.join(__dirname, '../src'), return {
entry: { context: path.join(__dirname, '../src'),
inject: ['./inject.js'], entry: {
parity: ['./inject.js'], [entryName]: ['./inject.js']
web3: ['./inject.js'] },
}, output: {
output: { path: path.join(__dirname, '../', DEST),
path: path.join(__dirname, '../', DEST), filename: '[name].js',
filename: '[name].js', library: '[name].js',
library: '[name].js', libraryTarget: 'umd'
libraryTarget: 'umd' },
},
resolve: { resolve: {
alias: { alias: {
'~': path.resolve(__dirname, '..'), '~': path.resolve(__dirname, '..'),
'@parity/abi': path.resolve(__dirname, '../node_modules/@parity/abi'), '@parity/abi': path.resolve(__dirname, '../node_modules/@parity/abi'),
'@parity/api': path.resolve(__dirname, '../node_modules/@parity/api'), '@parity/api': path.resolve(__dirname, '../node_modules/@parity/api'),
'@parity/etherscan': path.resolve(__dirname, '../node_modules/@parity/etherscan'), '@parity/etherscan': path.resolve(__dirname, '../node_modules/@parity/etherscan'),
'@parity/jsonrpc': path.resolve(__dirname, '../node_modules/@parity/jsonrpc'), '@parity/jsonrpc': path.resolve(__dirname, '../node_modules/@parity/jsonrpc'),
'@parity/shared': path.resolve(__dirname, '../node_modules/@parity/shared'), '@parity/shared': path.resolve(__dirname, '../node_modules/@parity/shared'),
'@parity/ui': path.resolve(__dirname, '../node_modules/@parity/ui'), '@parity/ui': path.resolve(__dirname, '../node_modules/@parity/ui'),
'@parity/wordlist': path.resolve(__dirname, '../node_modules/@parity/wordlist'), '@parity/wordlist': path.resolve(__dirname, '../node_modules/@parity/wordlist'),
'@parity': path.resolve(__dirname, '../packages') '@parity': path.resolve(__dirname, '../packages')
}
},
node: {
fs: 'empty'
},
module: {
rules: [
rulesParity,
rulesEs6,
{
test: /\.js$/,
exclude: /node_modules/,
use: [ 'babel-loader' ]
},
{
test: /\.json$/,
use: [ 'json-loader' ]
},
{
test: /\.html$/,
use: [ {
loader: 'file-loader',
options: {
name: '[name].[ext]'
}
} ]
} }
] },
},
plugins: Shared.getPlugins() node: {
}; fs: 'empty'
},
module: {
rules: [
rulesParity,
rulesEs6,
{
test: /\.js$/,
exclude: /node_modules/,
use: [ 'babel-loader' ]
},
{
test: /\.json$/,
use: [ 'json-loader' ]
},
{
test: /\.html$/,
use: [ {
loader: 'file-loader',
options: {
name: '[name].[ext]'
}
} ]
}
]
},
plugins: Shared.getPlugins()
};
});