压缩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 相关文章推荐
在IE6下发生Internet Explorer cannot open the Internet site错误
Jun 21 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
Feb 25 Javascript
Angular.js回顾ng-app和ng-model使用技巧
Apr 26 Javascript
canvas红包照片实例分享
Feb 28 Javascript
浅谈Express异步进化史
Sep 09 Javascript
JavaScript实现仿Clock ISO时钟
Jun 29 Javascript
angular4强制刷新视图的方法
Oct 09 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 Javascript
关于Vue中axios的封装实例详解
Oct 20 Javascript
vuex state中的数组变化监听实例
Nov 06 Javascript
javascript数组的定义及操作实例
Nov 10 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
Jan 21 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
python版本的仿windows计划任务工具
2018/04/30 Python
python中取绝对值简单方法总结
2020/07/24 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
护士演讲稿范文
2014/01/05 职场文书
伊索寓言教学反思
2014/05/01 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
求职信范文怎么写
2015/03/19 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis