ilp-core
Version:
ILP core module managing ledger abstraction
177 lines (160 loc) • 6.2 kB
JavaScript
require('babel-polyfill');
// Webpack config for development
var fs = require('fs');
var path = require('path');
var webpack = require('webpack');
var assetsPath = path.resolve(__dirname, '../static/dist');
var host = (process.env.CLIENT_HOST || 'localhost');
var port = +process.env.CLIENT_PORT + 1;
// https://github.com/halt-hammerzeit/webpack-isomorphic-tools
var WebpackIsomorphicToolsPlugin = require('webpack-isomorphic-tools/plugin');
var webpackIsomorphicToolsPlugin = new WebpackIsomorphicToolsPlugin(require('./webpack-isomorphic-tools'));
var babelrc = fs.readFileSync('./.babelrc');
var babelrcObject = {};
try {
babelrcObject = JSON.parse(babelrc);
} catch (err) {
console.error('==> ERROR: Error parsing your .babelrc.');
console.error(err);
}
var babelrcObjectDevelopment = babelrcObject.env && babelrcObject.env.development || {};
// merge global and dev-only plugins
var combinedPlugins = babelrcObject.plugins || [];
combinedPlugins = combinedPlugins.concat(babelrcObjectDevelopment.plugins);
var babelLoaderQuery = Object.assign({}, babelrcObjectDevelopment, babelrcObject, {plugins: combinedPlugins});
delete babelLoaderQuery.env;
// Since we use .babelrc for client and server, and we don't want HMR enabled on the server, we have to add
// the babel plugin react-transform-hmr manually here.
// make sure react-transform is enabled
babelLoaderQuery.plugins = babelLoaderQuery.plugins || [];
var reactTransform = null;
for (var i = 0; i < babelLoaderQuery.plugins.length; ++i) {
var plugin = babelLoaderQuery.plugins[i];
if (Array.isArray(plugin) && plugin[0] === 'react-transform') {
reactTransform = plugin;
}
}
if (!reactTransform) {
reactTransform = ['react-transform', {transforms: []}];
babelLoaderQuery.plugins.push(reactTransform);
}
if (!reactTransform[1] || !reactTransform[1].transforms) {
reactTransform[1] = Object.assign({}, reactTransform[1], {transforms: []});
}
// make sure react-transform-hmr is enabled
reactTransform[1].transforms.push({
transform: 'react-transform-hmr',
imports: ['react'],
locals: ['module']
});
module.exports = {
cache: true,
devtool: 'eval',
context: path.resolve(__dirname, '..'),
entry: {
app_assets: [
'bootstrap-sass!./src/theme/bootstrap.config.js',
'font-awesome-webpack!./src/theme/font-awesome.config.js',
'./src/client.js'
],
// TODO maybe include all deps by default?
vendor: [
'babel-polyfill',
'babel-runtime/core-js/array/from',
'babel-runtime/core-js/get-iterator',
'babel-runtime/core-js/is-iterable',
'babel-runtime/core-js/json/stringify',
'babel-runtime/core-js/number/is-integer',
'babel-runtime/core-js/number/is-safe-integer',
'babel-runtime/core-js/object/define-property',
'babel-runtime/core-js/object/get-own-property-descriptor',
'babel-runtime/core-js/object/get-own-property-names',
'babel-runtime/core-js/object/get-prototype-of',
'babel-runtime/core-js/promise',
'babel-runtime/helpers/create-class',
'babel-runtime/helpers/createClass',
'babel-runtime/helpers/defineProperty',
'babel-runtime/helpers/get',
'babel-runtime/helpers/possibleConstructorReturn',
'babel-runtime/helpers/slicedToArray',
'babel-runtime/helpers/to-consumable-array',
'babel-runtime/helpers/toConsumableArray',
'classnames/bind',
'lodash',
'moment',
'moment-timezone',
'react',
'react-addons-create-fragment',
'react-addons-css-transition-group',
'react-bootstrap',
'react-dom',
'react-dropzone-component',
'react-ga',
'react-paginate',
'react-redux',
'react-router',
'react-router-bootstrap',
'react-router-redux',
'react-timeago',
'react-waypoint',
'redux',
'redux-async-connect',
'redux-form',
'redux-pagination',
'socket.io-client',
'superagent',
'uuid4',
'react-hotkeys',
'redux-devtools',
'redux-devtools-log-monitor',
'redux-devtools-dock-monitor'
]
},
output: {
path: assetsPath,
filename: '[name].dll.js',
library: '[name]',
publicPath: 'http://' + host + ':' + (port - 1) + '/dist/'
},
module: {
loaders: [
{ test: /\.jsx?$/, exclude: /node_modules/, loaders: ['babel?' + JSON.stringify(babelLoaderQuery)]},
{ test: /\.json$/, loader: 'json-loader' },
{ test: /\.less$/, loader: 'style!css?modules&importLoaders=2&sourceMap&localIdentName=[local]___[hash:base64:5]!autoprefixer?browsers=last 2 version!less?outputStyle=expanded&sourceMap' },
{ test: /\.scss$/, loader: 'style!css?modules&importLoaders=2&sourceMap&localIdentName=[local]___[hash:base64:5]!autoprefixer?browsers=last 2 version!resolve-url!sass?outputStyle=expanded&sourceMap' },
{ test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&mimetype=application/font-woff" },
{ test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&mimetype=application/font-woff" },
{ test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&mimetype=application/octet-stream" },
{ test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: "file" },
{ test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&mimetype=image/svg+xml" },
{ test: webpackIsomorphicToolsPlugin.regular_expression('images'), loader: 'url-loader?limit=10240' }
]
},
progress: true,
resolve: {
modulesDirectories: [
'src',
'node_modules'
],
extensions: ['', '.json', '.js', '.jsx']
},
sassLoader: {
includePaths: [path.resolve(__dirname, "../src/theme"), 'node_modules', '../../../']
},
plugins: [
new webpack.DllPlugin({
name: '[name]',
path: path.join( assetsPath, '[name]-manifest.json' ),
}),
// hot reload
new webpack.HotModuleReplacementPlugin(),
new webpack.IgnorePlugin(/webpack-stats\.json$/),
new webpack.DefinePlugin({
__CLIENT__: true,
__SERVER__: false,
__DEVELOPMENT__: true,
__DEVTOOLS__: true // <-------- DISABLE redux-devtools HERE
}),
webpackIsomorphicToolsPlugin.development()
]
};