压缩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 相关文章推荐
自适应图片大小的弹出窗口
Jul 27 Javascript
通过javascript设置css属性的代码
Dec 28 Javascript
js身份证判断方法支持15位和18位
Mar 18 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
Aug 22 Javascript
JavaScript正则表达式匹配 div  style标签
Mar 15 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
JavaScript无缝滚动效果的实例代码
Mar 27 Javascript
利用node.js本地搭建HTTP服务器
Apr 19 Javascript
js中el表达式的使用和非空判断方法
Mar 28 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
ZK中使用JS读取客户端txt文件内容问题
Nov 07 Javascript
uin-app+mockjs实现本地数据模拟
Aug 26 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
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
多版本Python共存的配置方法
2017/05/22 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
Python Gitlab Api 使用方法
2019/08/28 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
Python self用法详解
2020/11/28 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
党员服务承诺书
2014/05/28 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
党员自我评价范文2015
2015/03/03 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL