压缩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 判断指定字符串是否为有效数字
May 11 Javascript
推荐20家国外的脚本下载网站
Apr 28 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
Mar 15 Javascript
javascript文本框内输入文字倒计数的方法
Feb 24 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
Aug 11 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
Aug 03 Javascript
jquery删除数组中重复元素
Dec 05 Javascript
微信小程序实时聊天WebSocket
Jul 05 Javascript
原生JS实现留言板功能
Feb 08 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
Apr 10 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
Nov 06 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
建立文件交换功能的脚本(二)
2006/10/09 PHP
php 模拟POST|GET操作实现代码
2010/07/20 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
PHP中的事务使用实例
2015/05/26 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
质量月活动策划方案
2014/03/10 职场文书
对标管理实施方案
2014/03/12 职场文书
小学老师寄语大全
2014/04/04 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
工作岗位说明书模板
2014/05/09 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
golang中字符串MD5生成方式总结
2021/07/04 Golang