详解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 innerHTML、outerHTML、innerText、outerText的区别
Nov 24 Javascript
在Javascript里访问SharePoint列表数据的实现方法
May 22 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
May 13 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
Sep 13 Javascript
原生javascript实现简单的datagrid数据表格
Jan 02 Javascript
jQuery中end()方法用法实例
Jan 08 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
Apr 15 Javascript
微信小程序 css使用技巧总结
Jan 09 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
基于JavaScript实现飘落星星特效
Aug 10 Javascript
js实现超级玛丽小游戏
Mar 18 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
php基本函数汇总
2015/07/09 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
Python itertools模块详解
2015/05/09 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
python pyheatmap包绘制热力图
2018/11/09 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
如何在python中执行另一个py文件
2020/04/30 Python
python中pop()函数的语法与实例
2020/12/01 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
保安员岗位职责
2013/11/17 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
粗加工管理制度
2014/02/04 职场文书
主管会计岗位职责
2014/03/13 职场文书
动物科学专业求职信
2014/07/27 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
信用卡工作证明范本
2015/06/19 职场文书
浅谈Redis的事件驱动模型
2022/05/30 Redis