module.exports = {
mode: 'development',
// 下面这里是默认值
entry: {
// 入口文件名的键 main (下面简称 入口文件)
main: './src/index.js'
},
output: {
filename: '[name].bound.js',
path: path.resolve(__dirname, '../dist'),
},
...
optimization{
splitChunks: {
/**
1. 三个值
async 仅提取按需载入的module
initial 仅提取同步载入的module
all 按需、同步都有提取
*/
chunks: "async",
// 只有导入的模块 大于 该值 才会 做代码分割 (单位字节)
minSize: 30000,
// 提取出的新chunk在两次压缩之前要小于多少kb,默认为0,即不做限制
maxSize: 0,
// 被提取的chunk最少需要被多少chunks共同引入
minChunks: 1,
// 按需加载的代码块(vendor-chunk)并行请求的数量小于或等于5个
maxAsyncRequests: 5,
// 初始加载的代码块,并行请求的数量小于或者等于3个
maxInitialRequests: 3,
// 默认命名 连接符
automaticNameDelimiter: '~',
/**
name 为true时,分割文件名为 [缓存组名][连接符][入口文件名].js
name 为false时,分割文件名为 [模块id][连接符][入口文件名].js
如果 缓存组存在 name 属性时 以缓存组的name属性为准
*/
name: true,
// 缓存组 当符合 代码分割的 条件时 就会进入 缓存组 把各个模块进行分组,最后一块打包
cacheGroups: {
// 如果 引入文件 在node_modules 会被打包 这个缓存组(vendors)
vendors: {
// 只分割 node_modules文件夹下的模块
test: /[\\/]node_modules[\\/]/,
// 优先级 因为如果 同时满足 vendors、和default 哪个优先级高 就会打包到哪个缓存组
priority: -10
},
default: {
// 表示这个库 至少被多少个chunks引入,
minChunks: 2,
priority: -20,
// 如果 这个模块已经 被分到 vendors组,这里无需在分割 直接引用 分割后的
reuseExistingChunk: true
}
}
}
}
}
// math.js
export default function(){
console.log('add')
}
// index,js
// 非 node_modules 模块
import add from './math'
// node_modules 模块
import axios from 'axios'
add()
axios({})
// 修改配置
minSize: 1, //因为 math.js 文件过小 表示 大于1字节 就做代码分割
minChunks: 2, // 把它去掉 即不做限制
// 打包结果
default~main.bound.js 221 bytes // math.js 打包文件
default~main.bound.js.map 125 bytes
index.html 533 bytes
main.bound.js 1.51 KiB // 入口文件
main.bound.js.map 109 bytes
vendors~main.bound.js 14.7 KiB // axios 打包文件
vendors~main.bound.js.map 125 bytes
webpack4的splitChunksPlugin配置参数详解---代码分割
原文:https://www.cnblogs.com/HJ412/p/12405022.html