压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)


Posted in Javascript onFebruary 03, 2020

问题

由于这次项目是在初学 Vue 之后的第一个正式项目,没有考虑到类似 路由懒加载、 按需加载的问题 ,所以呢,也算是没经验。

到了这些天,项目写得差不多了,准备放到服务器测试,才发现这个问题。

优化前:

app.js    2.3MB
vendor.js   2.4MB
vendor.css  612kB
app.js.map  9.13MB
vendor.js.map 16.21MB
//不一一列举....

优化

接下来看看优化方法。

优化步骤1: 不生成.map文件

在 webpack.prod.cong.js 文件下,修改配置项 sourceMap 设置为 false 或者删除:

new webpack.optimize.UglifyJsPlugin({
  compress: {
    warnings: false
  },
  // sourceMap: true //将sourceMap关闭就不会打包出.map文件
}),

这样的话,开发环境就不会生成 .map 文件。

优化步骤2: 按需加载

对于项目中,一些 通用 或者 不是特别差异 的组件可以使用按需加载,在需要的时候加载即可,并且会自动缓存。

这时候需要在 router 文件夹下的 index.js 文件修改路由配置中的 组件引入 方式:

Vue.use(Router)
export default new Router({
  routes:[{
    path:"/",
    component:function(resolve){
      require(["./../components/Index"],resolve)
    }
  }]
})

这样的话,这个组件就会在你需要加载的时候才会加载。

优化步骤3: VueRouter的懒加载

官方文档

在 vue-router 的模块引入,将默认的 import .. from .. 引入方式,修改为一步。如下:

const Foo = () => import("/Foo.vue)
```

然后在 `配置路由` 中,和之前一样使用:

Vue.use(Router)
export default new Router({
routes:[{
path:”/“,
component:Foo
}]
})

优化步骤4:将大的第三方包通过<script>标签引入

一般将类似 `echarts` 这种比较大的第三方依赖包,通过 `<script></script>` 标签来引入的话,会很大程度缩小打包的大小。   

但是需要在 `vue` 配置文件这样配置:

`webpack.base.config.js` 中添加 `不打包` 的包的名称,这样打包的时候才不会把这些包一起打包进去:  

module.exports = {
  entry:{...},
  output:{...},
  resolve:{...},
  module:{...},
  externals:{
    "echarts":"echarts" //不打包的包名
  }
}

然后在 index.html 中用 <script></script> 标签引入依赖包的CDN或者其他地址。

优化步骤5: 图片压缩

这个不用怎么说,有个地址很好用,推荐下:tinypng

优化后

通过这几步骤,优化完成的每个文件都会缩小好多倍:

app.js    136.2kB
vendor.js   213.2kB
vendor.css  612kB  //css 这个我还没办法
app.js.map  0MB
vendor.js.map 0MB

更多关于VUE压缩的方案大家可以看看下面的相关文章

Javascript 相关文章推荐
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
Oct 22 Javascript
js键盘上下左右键怎么触发function(实例讲解)
Dec 14 Javascript
JavaScript中的函数重载深入理解
Aug 04 Javascript
JQuery中serialize()用法实例分析
Feb 06 Javascript
js省市联动效果完整实例代码
Dec 09 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 Javascript
BootStrap3使用错误记录及解决办法
Dec 22 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
vue2中引用及使用 better-scroll的方法详解
Nov 15 Javascript
Node.js API详解之 dns模块用法实例分析
May 15 Javascript
vue使用screenfull插件实现全屏功能
Sep 17 Javascript
24个解决实际问题的ES6代码片段(小结)
Feb 02 #Javascript
浅谈vuex为什么不建议在action中修改state
Feb 02 #Javascript
vuex+axios+element-ui实现页面请求loading操作示例
Feb 02 #Javascript
vue实现的封装全局filter并统一管理操作示例
Feb 02 #Javascript
node 版本切换的实现
Feb 02 #Javascript
vue路由缓存的几种实现方式小结
Feb 02 #Javascript
vue简单封装axios插件和接口的统一管理操作示例
Feb 02 #Javascript
You might like
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
javascript 动态参数判空操作
2008/12/22 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
微信小程序入门教程
2016/11/18 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
JavaScript累加、迭代、穷举、递归等常用算法实例小结
2018/05/08 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
vue filters的使用详解
2018/06/11 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
python实现linux下使用xcopy的方法
2015/06/28 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
Python简单基础小程序的实例代码
2019/04/28 Python
Python实现把类当做字典来访问
2019/12/16 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
大学生自我鉴定
2013/12/16 职场文书
家长会演讲稿范文
2014/01/10 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
母校寄语大全
2014/04/10 职场文书
读书活动总结
2014/04/28 职场文书
技术支持岗位职责
2015/02/13 职场文书
《角的度量》教学反思
2016/02/18 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
原生JS实现飞机大战小游戏
2021/06/09 Javascript