Files
freeCodeCamp/webpack.config.js
Berkeley Martinez ef80131a29 feat(build): Add source maps to production
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
2018-02-06 13:53:56 -08:00

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' })
);
}