压缩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 UI CSS Framework开发Widget的经验
Aug 21 Javascript
js+html+css实现鼠标移动div实例
Jan 30 Javascript
解决json日期格式问题的3种方法
Feb 02 Javascript
js控制iframe的高度/宽度让其自适应内容
Apr 09 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
Nov 30 Javascript
JavaScript文本框脚本编写的注意事项
Jan 25 Javascript
jQuery表格(Table)基本操作实例分析
Mar 10 Javascript
Javascript中Promise的四种常用方法总结
Jul 14 Javascript
jquery easyui如何实现格式化列
Jul 30 jQuery
实现div内部滚动条滚动到底部和顶部的代码
Nov 15 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
Sep 09 Javascript
微信小程序实现二维码签到考勤系统
Jan 16 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
php牛逼的面试题分享
2013/01/18 PHP
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
python实现无证书加密解密实例
2014/10/27 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
详解Python用户登录接口的方法
2019/04/17 Python
浅析python标准库中的glob
2020/03/13 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
综治维稳工作承诺书
2014/08/30 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书