详解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事件模型代码
Jul 01 Javascript
JQuery 1.4 中的Ajax问题
Jan 23 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
Jul 29 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
Feb 02 Javascript
JQuery日期插件datepicker的使用方法
Mar 03 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
Jul 22 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
Feb 13 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
Javascript中的getter和setter初识
Aug 17 Javascript
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
Vue表单类的父子组件数据传递示例
May 03 Javascript
Vue仿百度搜索功能
Dec 28 Vue.js
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的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
PHP eval函数使用介绍
2013/12/08 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
jquery 选择器部分整理
2009/10/28 Javascript
js+css在交互上的应用
2010/07/18 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
angularjs指令之绑定策略(@、=、&)
2017/04/13 Javascript
详解a++和++a的区别
2017/08/30 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
vue实现动态按钮功能
2019/05/13 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
vue实现信息管理系统
2020/05/30 Javascript
Python设计模式之观察者模式简单示例
2018/01/10 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
Python帮你识破双11的套路
2019/11/11 Python
查看keras的默认backend实现方式
2020/06/19 Python
python redis存入字典序列化存储教程
2020/07/16 Python
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
服务员自我评价
2014/01/25 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
行政处罚听证告知书
2015/07/01 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang
Redis数据结构之链表与字典的使用
2021/05/11 Redis
Python基于百度API识别并提取图片中文字
2021/06/27 Python