压缩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的siblings效果的js代码
Aug 09 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
Apr 19 Javascript
用js的for循环获取radio选中的值
Oct 21 Javascript
javascript实现捕捉键盘上按下的键
May 05 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
js实现仿微博滚动显示信息的效果
Dec 21 Javascript
理解javascript中的with关键字
Feb 15 Javascript
BootStrap 可编辑表Table格
Nov 24 Javascript
全站最详细的Vuex教程
Apr 13 Javascript
vue-cli3+typescript初体验小结
Feb 28 Javascript
JsonProperty 的使用方法详解
Oct 11 Javascript
p5.js码绘“跳动的小正方形”的实现代码
Oct 22 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
BBS(php &amp; mysql)完整版(二)
2006/10/09 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
javascript StringBuilder类实现
2008/12/22 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
详解flask入门模板引擎
2018/07/18 Python
python实现排序算法解析
2018/09/08 Python
编码实现字符串转整型的函数
2012/06/02 面试题
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
你们项目是如何进行变更控制的
2015/08/26 面试题
应聘护士自荐信
2013/10/21 职场文书
商务英语专业应届毕业生求职信
2013/10/28 职场文书
物流业务员岗位职责
2014/02/08 职场文书
个性发展自我评价
2014/02/11 职场文书
公共场所标语
2014/06/30 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python