webpack Code Splitting详解

webpack Code Splitting详解

webpack4 废除了CommonsChunkPlugin 引入了 optimization.splitChunksjavascript

若是在webpack4中使用了weppack3的CommonsChunkPlugin 会出现如下报错:java

(运行配置文件 webpack3.config.js)Error: webpack.optimize.CommonsChunkPlugin has been removed, please use config.optimization.splitChunkswebpack

代码分割(Code Splitting)

将一个文件分割成多个文件:由于浏览器会缓存你的代码,每当你对某一文件作点改变,访问你站点的人们就要从新下载它,包括依赖。若是你将(这些依赖)分离成单独的文件,访问者就无需屡次重复下载它们了。web

使用webpack生成一个或多个包含你源代码最终版本的“打包好的文件”(bundles),(概念上咱们看成)它们由(一个一个的)chunks组成。浏览器

做用:缓存

​ 提取公用代码,减小代码的冗余,异步

​ 提升用户的加载速度async

​ 单页面减小下载,多页面可使用缓存优化

配置项

module.exports = {
 	//...
 	optimization: {
  		splitChunks: {
   			chunks: 'async', 
   			minSize: 30000,
   			minChunks: 1,
   			maxAsyncRequests: 5,
   			maxInitialRequests: 3,
   			automaticNameDelimiter: '~', 
   			name: true,
   			cacheGroups: {}
  		}
 	}
}
复制代码
  • chunks: 表示哪些代码须要优化,有三个可选值:initial(初始块)、async(按需加载块)、all(所有块),默认为async
  • minSize: 表示在压缩前的最小模块大小,默认为30000
  • minChunks: 表示被引用次数,默认为1
  • ````maxAsyncRequests```: 按需加载时候最大的并行请求数,默认为5
  • maxInitialRequests: 一个入口最大的并行请求数,默认为3
  • automaticNameDelimiter: 命名链接符
  • name: 拆分出来块的名字,默认由块名和hash值自动生成
  • cacheGroups: 缓存组。缓存组的属性除上面全部属性外,还有test, priority, reuseExistingChunk
    • test: 用于控制哪些模块被这个缓存组匹配到
    • priority: 缓存组打包的前后优先级
    • reuseExistingChunk: 若是当前代码块包含的模块已经有了,就不在产生一个新的代码块

注意initial 模式下会把异步和非异步模块分开打包。而 all 会把异步和非异步同时进行打包。也就是说moduleA在indexA中异步引入,indexB中同步引入, initial 下moduleA会出如今两个打包块中,而 all 只会出现一个。ui

官方文档:webpack.js.org/plugins/spl…

相关文章
相关标签/搜索