压缩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 相关文章推荐
JavaScript获取table中某一列的值的方法
May 06 Javascript
JS根据年月获得当月天数的实现代码
Jul 03 Javascript
javascript cookie基础应用之记录用户名的方法
Sep 20 Javascript
微信js-sdk上传与下载图片接口用法示例
Oct 12 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
Apr 14 Javascript
基于JavaScript实现飘落星星特效
Aug 10 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 Javascript
layui 表格的属性的显示转换方法
Aug 14 Javascript
vue-router的使用方法及含参数的配置方法
Nov 13 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
JS如何寻找数组中心索引过程解析
Jun 01 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
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
Windows下安装Memcached的步骤说明
2010/04/25 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
python模拟事件触发机制详解
2018/01/19 Python
Python中交换两个元素的实现方法
2018/06/29 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
用友笔试题目
2016/10/25 面试题
生产部岗位职责范文
2014/02/07 职场文书
求职自荐信怎么写
2014/03/06 职场文书
安全责任书怎么写
2014/07/28 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
如何写股份合作协议书
2014/09/11 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
晚会开幕词范文
2016/03/04 职场文书
java解析XML详解
2021/07/09 Java/Android