详解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 相关文章推荐
前台js改变Session的值(用ajax实现)
Dec 28 Javascript
js保留小数点后几位的写法
Jan 03 Javascript
jquery ajax,ashx,json的用法总结
Feb 12 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
jquery如何判断表格同一列不同行input数据是否重复
May 14 Javascript
readonly和disabled属性的区别
Jul 26 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
Aug 26 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
Mar 04 Javascript
老生常谈javascript中逻辑运算符&&和||的返回值问题
Apr 13 Javascript
js评分组件使用详解
Jun 06 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 Javascript
微信小程序中为什么使用var that=this
Aug 27 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
mysql中存储过程、函数的一些问题
2007/02/14 PHP
实用函数7
2007/11/08 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
php 文章调用类代码
2011/08/11 PHP
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
php中JSON的使用方法
2015/04/30 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
javascript显示选择目录对话框的代码
2008/11/10 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
python实现二维数组的对角线遍历
2019/03/02 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
小学生家长评语集锦
2014/01/30 职场文书
新郎新娘答谢词
2015/01/04 职场文书
幸福终点站观后感
2015/06/04 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记