压缩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 DOM写的类似微博发布的效果
Oct 20 Javascript
基于jquery实现的自动补全功能
Mar 12 Javascript
JavaScript中eval函数的问题
Jan 31 Javascript
浅谈JS中逗号运算符的用法
Jun 12 Javascript
AngularJS中比较两个数组是否相同
Aug 24 Javascript
Ionic3 UI组件之autocomplete详解
Jun 08 Javascript
使用Bootrap和Vue实现仿百度搜索功能
Oct 26 Javascript
Vue中render方法的使用详解
Jan 26 Javascript
浅谈一个webpack构建速度优化误区
Jun 24 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
Apr 14 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 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
晶体管单管来复再生式收音机
2021/03/02 无线电
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
Yii中表单用法实例详解
2016/01/05 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
python实现AES加密和解密
2019/03/27 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
python 公共方法汇总解析
2019/09/16 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
父亲的菜园教学反思
2014/02/13 职场文书
保健品市场营销方案
2014/03/31 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
营销计划书范文
2015/01/17 职场文书
图书馆义工感想
2015/08/07 职场文书
导游词之杭州西湖
2019/09/19 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers