详解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 相关文章推荐
jquery自动完成插件(autocomplete)应用之PHP版
Dec 15 Javascript
解决JS浮点数运算出现Bug的方法
Mar 12 Javascript
Node.js实现简单聊天服务器
Jun 20 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
May 24 Javascript
Bootstrap Validator 表单验证
Jul 25 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
Sep 05 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
Aug 22 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
Apr 26 Javascript
JavaScript实现图片轮播特效
Oct 23 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
May 09 Javascript
JavaScript数组类型Array相关的属性与方法详解
Sep 08 Javascript
JavaScript封装单向链表的示例代码
Sep 17 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 APC缓存配置、使用详解
2014/03/06 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
php函数连续调用实例分析
2015/07/30 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
答题辅助python代码实现
2018/01/16 Python
使用TensorFlow实现SVM
2018/09/06 Python
pandas针对excel处理的实现
2021/01/15 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
经典c++面试题五
2014/12/17 面试题
如何进行Linux分区优化
2013/02/12 面试题
音乐器材管理制度
2014/01/31 职场文书
员工拓展培训方案
2014/02/15 职场文书
银行进社区活动总结
2014/07/07 职场文书
煤矿安全协议书
2014/08/20 职场文书
践行三严三实心得体会
2014/10/13 职场文书
2014年终工作总结范本
2014/12/15 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书