In order to reduce the vendor js bundle size. We can split the node module packages into different bundle files. I referred this blog for splitting the bulky vendor file generated by webpack. Gist of that link which I used initially:
optimization: {
runtimeChunk: 'single',
splitChunks: {
chunks: 'all',
maxInitialRequests: Infinity,
minSize: 0,
cacheGroups: {
vendor: {
test: /[\/]node_modules[\/]/,
name(module) {
// get the name. E.g. node_modules/packageName/not/this/part.js
// or node_modules/packageName
const packageName = module.context.match(/[\/]node_modules[\/](.*?)([\/]|$)/)[1];
// npm package names are URL-safe, but some servers don't like @ symbols
return `npm.${packageName.replace('@', '')}`;
},
},
},
},
}
If one wants to group multiple packages and chunk then into different bundles then refer following gist.
optimization: {
runtimeChunk: 'single',
splitChunks: {
chunks: 'all',
maxInitialRequests: Infinity,
minSize: 0,
cacheGroups: {
reactVendor: {
test: /[\/]node_modules[\/](react|react-dom)[\/]/,
name: "reactvendor"
},
utilityVendor: {
test: /[\/]node_modules[\/](lodash|moment|moment-timezone)[\/]/,
name: "utilityVendor"
},
bootstrapVendor: {
test: /[\/]node_modules[\/](react-bootstrap)[\/]/,
name: "bootstrapVendor"
},
vendor: {
test: /[\/]node_modules[\/](!react-bootstrap)(!lodash)(!moment)(!moment-timezone)[\/]/,
name: "vendor"
},
},
},
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…