Case Study
webpack --mode=production
webpack --mode=development
Asset Size Chunks Chunk Names
[image] 245 bytes [emitted]
[image] 575 bytes [emitted]
...
app.css 33.8KiB 0 [emitted] app
app.js 2.19MiB 0 [emitted] [big] app
Split up webpack configuration
const merge = require('webpack-merge');
const common = require('webpack.common');
module.exports = merge(common, {
...
});
devtool: 'eval-source-map',
devtool: 'cheap-module-source-map',
Asset Size Chunks Chunk Names
[image] 245 bytes [emitted]
[image] 575 bytes [emitted]
...
app.css 33.8KiB 0 [emitted] app
app.js 428KiB 0 [emitted] [big] app
app.js.map 652KiB 0 [emitted] app
2.19MiB -> 428KiB
1.85MiB
import App from './App';
{
"presets": ["env", {
"targets": {
...
}, "modules": false }]
}
Asset Size Chunks Chunk Names
[image] 245 bytes [emitted]
[image] 575 bytes [emitted]
...
app.css 33.8KiB 0 [emitted] app
app.js 373KiB 0 [emitted] [big] app
app.js.map 250KiB 0 [emitted] app
2.19MiB -> 428 KiB -> 373KiB
55KiB (1.91MiB)
373KiB
module.exports = merge(common, {
optimization: {
splitChunks: {
cacheGroups: {
vendor: {
test: /node_modules/,
name: 'vendor',
chunks: 'initial',
enforce: true,
},
},
},
},
});
Asset Size Chunks Chunk Names
[image] 245 bytes [emitted]
[image] 575 bytes [emitted]
...
app.css 33.8KiB 0 [emitted] app
vendor.js 346KiB 0 [emitted] [big] vendorvendor.js.map 5.32 KiB 1 [emitted] vendor
app.js 31.6 KiB 0 [emitted] appapp.js.map 150KiB 0 [emitted] app
Application code 31.6KiB
output: {
filename: '[name].[chunkhash].js',
},
Visualizing dependencies
yarn add webpack-visualizer-plugin -D
const Visualizer = require('webpack-visualizer-plugin');
...
module.exports = merge(common, {
...
plugins: [
new Visualizer(),
...
],
}
import _ from 'lodash';
import forEach from 'lodash/forEach';
Asset Size Chunks Chunk Names
[image] 245 bytes [emitted]
[image] 575 bytes [emitted]
...
app.css 33.8KiB 0 [emitted] app
vendor.js 277KiB 0 [emitted] [big] vendor
app.js 31.6 KiB 0 [emitted] app
vendor.js.map 5.32 KiB 1 [emitted] vendor
app.js.map 105KiB 0 [emitted] app
2.19MiB -> 428 KiB -> 373KiB -> 277KiB
98KiB (2.01MiB)
Questions?