详解webpack 打包文件体积过大解决方案(code splitting)


Posted in Javascript onApril 10, 2018

优化对比 :

未优化前:index.html引入一个main.js文件,体积2M以上。

优化后入:index.html引入main.js、commons.js、charts.js、other.js。以达到将main.js平分目的。每个文件控制300k以内.(如果高兴100k也没问题)

用到的一堆库及工具:

vue、webpack、babel、highcharts、echarts、jquery、html2canvas******此去省略若干m代码

问题:

开发环境用webpack后发现单个js文件5m。

生产环境借助vue-cli的webpack配置,减少到2m。

解决方案:

搜索各种解决方案:require.ensure、require依赖、多entry、commonsChunkPlugin****此去省力若干方案

网络类似下边这种上解决方案太多了,但是都达不到预期效果

entry:{ 
 main:'xxx.js',
  chunks:['c1', 'c2'],
  commons:['jquery', 'highcharts', 'echarts','d3', 'xxxxx.js']  
}

 

plugins:{
new commonsChunkPlugin({
name:'commons',
minChunks:2
})  
}

最优解决方案:

entry:{ 
 main:'xxx.js'
}
 
plugins:{
 new commonsChunkPlugin({
 name:'commons',
 minChunks:function(module){
  // 下边return参考的vue-cli配置
  // any required modules inside node_modules are extracted to vendor
  return (
   module.resource &&
   /\.js$/.test(module.resource) &&
   module.resource.indexOf(
   path.join(__dirname, '../node_modules')
   ) === 0
  )
 }
}) ,
// 以下才是关键
new commonsChunkPlugin({
 name:'charts',
 chunks:['commons'] 
 minChunks:function(module){
  return (
   module.resource &&
   /\.js$/.test(module.resource) &&
   module.resource.indexOf(
   path.join(__dirname, '../node_modules')
   ) === 0 && ['jquery.js', 'highcharts.js','echarts'].indexOf( module.resource.substr(module.resource.lastIndexOf('/')+1).toLowerCase() ) != -1
  )
 }
}) // 如果愿意,可以再new 一个commonsChunkPlugin
 
}

以上代码打包出来的结果:main.js 、commons.js、charts.js 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScipt基本教程之前言
Jan 16 Javascript
jQuery 在光标定位的地方插入文字的插件
May 10 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
使用递归遍历对象获得value值的实现方法
Jun 14 Javascript
JS实现网页抢购功能(触发,终止脚本)
Nov 27 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
Aug 10 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 Javascript
Laravel admin实现消息提醒、播放音频功能
Jul 10 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
Aug 04 Javascript
Vue3.0 响应式系统源码逐行分析讲解
Oct 14 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
Feb 08 Javascript
Angular CLI在Angular项目中如何使用scss详解
Apr 10 #Javascript
vue2.0+koa2+mongodb实现注册登录
Apr 10 #Javascript
bing Map 在vue项目中的使用详解
Apr 09 #Javascript
详解Vue打包优化之code spliting
Apr 09 #Javascript
node实现基于token的身份验证
Apr 09 #Javascript
vue-cli扩展多模块打包的示例代码
Apr 09 #Javascript
webpack中的热刷新与热加载的区别
Apr 09 #Javascript
You might like
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
Python简单的制作图片验证码实例
2017/05/31 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
python字典改变value值方法总结
2019/06/21 Python
Python全栈之列表数据类型详解
2019/10/01 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
实习生个人找工作的自我评价
2013/10/30 职场文书
函授大专自我鉴定
2013/11/01 职场文书
《蜗牛》教学反思
2014/02/18 职场文书
小学中队活动总结
2015/05/11 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
离婚协议书范文2016
2016/03/18 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL