详解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中的parseInt使用技巧
Sep 03 Javascript
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
Nov 27 Javascript
JavaScript中string转换成number介绍
Dec 31 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
基于jquery实现ajax无刷新评论
Aug 19 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 Javascript
JS实现搜索框文字可删除功能
Dec 28 Javascript
jQuery源码分析之init的详细介绍
Feb 13 Javascript
解决iview多表头动态更改列元素发生的错误的方法
Nov 02 Javascript
Js图片点击切换轮播实现代码
Jul 27 Javascript
js实现飞机大战游戏
Aug 26 Javascript
基于ant design日期控件使用_仅月份的操作
Oct 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
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
浅析php header 跳转
2013/06/17 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
2017/06/06 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
研修第一天随笔感言
2014/02/15 职场文书
大三学习计划书范文
2014/05/02 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
React配置子路由的实现
2021/06/03 Javascript
python之django路由和视图案例教程
2021/07/26 Python
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技