压缩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 相关文章推荐
Add Formatted Data to a Spreadsheet
Jun 12 Javascript
可以浮动某个物体的jquery控件用法实例
Jul 24 Javascript
javascript实现五星评分功能
Nov 10 Javascript
JS之相等操作符详解
Sep 13 Javascript
JavaScript 身份证号有效验证详解及实例代码
Oct 20 Javascript
原生JS查找元素的方法(推荐)
Nov 22 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
May 22 Javascript
JavaScript之promise_动力节点Java学院整理
Jul 03 Javascript
完美解决linux下node.js全局模块找不到的情况
May 16 Javascript
详解ES6中的三种异步解决方案
Jun 28 Javascript
0基础学习前端开发的一些建议
Jul 14 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
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读取mysql的简单实例
2014/01/15 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
BootStrap 动态添加验证项和取消验证项的实现方法
2016/09/28 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
浅析python协程相关概念
2018/01/20 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
2020/06/05 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
HTML5注册页面示例代码
2014/03/27 HTML / CSS
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
教师自我反思材料
2014/02/14 职场文书
《桥》教学反思
2014/04/09 职场文书
工厂搬迁方案
2014/05/11 职场文书
投标服务承诺书
2014/05/28 职场文书
药店促销活动总结
2014/07/10 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书