详解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 相关文章推荐
JavaScript 开发中规范性的一点感想
Jun 23 Javascript
JavaScript 创建运动框架的实现代码
May 08 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
Jan 11 Javascript
jQuery设置指定网页元素宽度和高度的方法
Mar 25 Javascript
jQuery实现的动态伸缩导航菜单实例
May 07 Javascript
js淡入淡出的图片轮播效果代码分享
Aug 24 Javascript
7个jQuery最佳实践
Jan 12 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
Apr 08 Javascript
JS中from 表单序列化提交的代码
Jan 20 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
Aug 04 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
Nov 20 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 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世纪万年历
2006/12/06 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
js实现无缝滚动图
2017/02/22 Javascript
JS Testing Properties 判断属性是否在对象里的方法
2017/10/01 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
Python基于select实现的socket服务器
2016/04/13 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
python模拟事件触发机制详解
2018/01/19 Python
python实现停车管理系统
2018/11/30 Python
python print出共轭复数的方法详解
2019/06/25 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
python获取Pandas列名的几种方法
2019/08/07 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
Django values()和value_list()的使用
2020/03/31 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
介绍一下XMLHttpRequest对象
2012/02/12 面试题
物流司机岗位职责
2013/12/28 职场文书
对孩子的寄语
2014/04/09 职场文书
先进人物事迹材料
2014/12/29 职场文书
大班下学期个人总结
2015/02/13 职场文书
Python OpenCV快速入门教程
2021/04/17 Python