Tips on how to optimize your webpack bundle
Here is a list of ways to reduce the weight of your app's bundle, ordered by most significant to less significant. (Estimated weight reductions are based on a non-compressed bundle)
Install a bundle analyzer
The most important thing to do is installing webpack-bundle-analyzer. This plugin let you see every modules inside all your bundles. It's essential to understand what is going on !
npm install --save-dev webpack-bundle-analyzer
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
 
module.exports = {
  plugins: [
    new BundleAnalyzerPlugin(),
  ]
}
Use CommonsChunkPlugin
It basically looks for duplicated modules across your chunks and move them into a separate common chunk. It's very useful if you have multiple entry points using the same modules. You could also extract all vendors into a common bundle. There is many things you can do, I invite you to check the doc because it really depends on your project.
But here is a basic exemple extracting all modules that are in 2 or more places :
var CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');
module.exports = {
  plugins: [
    new CommonsChunkPlugin({
      name: '/dist/common',
      minChunks: 2,
    }),
  ]
}
Moment.js
By default, all locales will be loaded. To pick only those we need, we gonna use ContextReplacementPlugin like so to include only English and French for example :
var ContextReplacementPlugin = require('webpack/lib/ContextReplacementPlugin');
module.exports = { 
  plugins: [
    new ContextReplacementPlugin(/moment[\/\\]locale$/, /^(en|fr)$/),
  ]
}
Lodash (-0.5 MB)
When you import lodash with import _ from 'lodash', the whole lodash library gets added into your bundle.
You can load only parts that you need like so :
import _filter from 'lodash/filter'
jQuery
Even if you are not using it, it may be included by some of your dependencies. You could include a CDN version of it using a script tag and tell webpack to use this external version instead like so :
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
module.exports = {
  externals: {
    jquery: 'jQuery',
  },
}
Andd that's it.
I'll update this list when I find new tips that could benefit a wide range of people :)