热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何优化Webpack打包后的代码分割

本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。

  • 源代码index.js里包含2部分
  • ① 业务逻辑代码 1mb
  • ② 引入(如lodash包)的代码 1mb
  • 若更新了业务逻辑代码,但在浏览器运行时每次都下载2mb的index.js显然不合理,第三方包是不会变的

手动拆分


  • webpack.base.js

entry: {main: path.resolve(__dirname, "../src/index.js"),loadsh: path.resolve(__dirname, "../src/lodash.js"),
},

  • lodash.js

import _ from 'lodash'
window._ = _

  • index.js

const res = _.join('test', 1)
console.log(1, res)

  • 打包后index.html

<script type&#61;"text/Javascript" src&#61;"js/main.js"></script>
<script type&#61;"text/Javascript" src&#61;"js/loadsh.js"></script>

在这里插入图片描述


使用webpack插件


https://webpack.docschina.org/plugins/split-chunks-plugin/#defaults


  • 配置optimization
  • 依然在index.js中引入lodash.js

entry: {main: path.resolve(__dirname, "../src/index.js"),
},
optimization: {splitChunks: {chunks: &#39;all&#39; // 同步/异步代码都要做分割}
},

在这里插入图片描述


异步代码


  • index.js

// 异步代码
// 只有执行createElement函数时才会引入lodash&#xff0c;打开打包后的index.html才会下载0.js
// 若不执行则不下载
// 异步代码不管是否执行&#xff0c;编译都会生成0.js
function createElement() {return import(&#39;lodash&#39;).then(({ default: _ }) &#61;> {const res &#61; _.join([1, 2, 3], &#39;*&#39;)const div &#61; document.createElement(&#39;div&#39;)div.innerText &#61; resreturn div})
}
createElement().then((div) &#61;> {document.body.appendChild(div)
})

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


  • 注意&#xff0c;异步代码webpack.base.js中不需要配置optimization
  • 打开页面时&#xff0c;0.js会延迟一点下载

代码分割重命名


  • import前添加注释webpackChunkName: "my-loadsh"

function createElement() {return import(/* webpackChunkName: "my-loadsh" */ &#39;lodash&#39;).then(({ default: _ }) &#61;> {const res &#61; _.join([1, 2, 3], &#39;*&#39;)const div &#61; document.createElement(&#39;div&#39;)div.innerText &#61; resreturn div})
}
createElement().then((div) &#61;> {document.body.appendChild(div)
})

在这里插入图片描述


vendors从哪来&#xff1f;


  • webpack.base.js 配置cacheGroups后

optimization: {splitChunks: {chunks: &#39;all&#39;,cacheGroups: {vendors: false,default: false,}}
},

在这里插入图片描述


  • 可配置&#xff1a;
  • minSize 对多大的文件分割打包
  • minChunks 在入口中引入模块次数>&#61; n时才会做代码分割

推荐阅读
author-avatar
ALL_TTDD
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有