We don't have the same precautions as other sites as our code base is open source, so we might as well make it easier on us to debug production errors
89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
const webpack = require('webpack');
|
|
const path = require('path');
|
|
const ManifestPlugin = require('webpack-manifest-plugin');
|
|
const ChunkManifestPlugin = require('chunk-manifest-webpack-plugin');
|
|
const Visualizer = require('webpack-visualizer-plugin');
|
|
const UglifyPlugin = require('uglifyjs-webpack-plugin');
|
|
|
|
var __DEV__ = process.env.NODE_ENV !== 'production';
|
|
|
|
module.exports = {
|
|
entry: {
|
|
bundle: './client'
|
|
},
|
|
devtool: __DEV__ ? 'inline-source-map' : 'source-map',
|
|
node: {
|
|
// Mock Node.js modules that Babel require()s but that we don't
|
|
// particularly care about.
|
|
fs: 'empty',
|
|
module: 'empty',
|
|
net: 'empty'
|
|
},
|
|
output: {
|
|
filename: __DEV__ ? '[name].js' : '[name]-[hash].js',
|
|
chunkFilename: __DEV__ ?
|
|
'[name].js' :
|
|
'[name]-[chunkhash].js',
|
|
path: path.join(__dirname, '/public/js'),
|
|
publicPath: '/js'
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
'dist/rx.all.js': 'rx/dist/rx.all.js'
|
|
}
|
|
},
|
|
module: {
|
|
rules: [{
|
|
test: /\.jsx?$/,
|
|
include: [
|
|
path.join(__dirname, 'client/'),
|
|
path.join(__dirname, 'common/'),
|
|
path.join(__dirname, 'server/')
|
|
],
|
|
use: [
|
|
__DEV__ && 'react-hot-loader',
|
|
'babel-loader'
|
|
].filter(Boolean)
|
|
}]
|
|
},
|
|
externals: {
|
|
codemirror: 'CodeMirror',
|
|
'loop-protect': 'loopProtect'
|
|
},
|
|
plugins: [
|
|
new webpack.DefinePlugin({
|
|
'process.env': {
|
|
NODE_ENV: JSON.stringify(__DEV__ ? 'development' : 'production')
|
|
},
|
|
__DEVTOOLS__: !__DEV__
|
|
}),
|
|
// Use browser version of visionmedia-debug
|
|
new webpack.NormalModuleReplacementPlugin(
|
|
/debug\/node/,
|
|
'debug/src/browser'
|
|
)
|
|
]
|
|
};
|
|
|
|
if (!__DEV__) {
|
|
module.exports.plugins.push(
|
|
new UglifyPlugin({
|
|
test: /\.js($|\?)/i,
|
|
cache: true,
|
|
sourceMap: true
|
|
}),
|
|
new ManifestPlugin({ fileName: 'react-manifest.json' }),
|
|
new ChunkManifestPlugin({
|
|
filename: 'chunk-manifest.json',
|
|
manifestVariable: 'webpackManifest'
|
|
})
|
|
);
|
|
} else {
|
|
module.exports.plugins.push(
|
|
new webpack.HotModuleReplacementPlugin(),
|
|
new webpack.NoEmitOnErrorsPlugin(),
|
|
// this will output a .html file in output.path
|
|
new Visualizer({ filename: 'webpack-bundle-stats.html' })
|
|
);
|
|
}
|