vue-cli 打包优化
1. 优化打包体积
先上2个图

(上图A是优化前的各个js大小对比视图,下图B是优化后,还未完全优化完成的,不过也可以看得出来对比)

图A是3个压缩文件,包括部分图片和使用的所有js,体积都偏大
图B是每个页面都区分了,以及一些大的js块都拆开了的,每个页面打开时均按需加载,而不是一次加载全部,这样就省了不必要的js加载,消耗流量;
1.1 首先vue-cli在初始化时已经预装了插件webpack-bundle-analyzer ,此插件就是打包隔离分析js,只需运行:npm run build --report 这个是执行分析并在浏览器中生成展示,图A就是未处理的,可看到只有3个大的JS,而且每个页面都会获取(因为页面跳转采用的是window.location.href,这种方式会重新渲染页面,而不是走vue的路由,而导致这个原因是app内嵌跳转无法监测拦截,所以才使用window.locaiton.href) ,这样将会导致页面加载变慢;
1.2 拆页面,在router.js中把所有的import引用的页面均改成动态import()这种引用形式,这样就会把每个页面所需的vue页面,css,js隔离分开按需加载 ,不至于一次加载全部导致页面变慢,然后拆第三方js,我们可以把第三方js拆出来,使用cdn引用,这里我使用的是bootCDN ,列举里边两个比较特殊的:
1.2.1 pdf.js 这个插件,直接占图A的一块了,太大了,我就直接干掉引用链接了,然而使用的时候出现了问题,PDFJS.getDocument这个找不到了,是PDFJS这个引用名找不到了,在网上没收到,然后想到了是不是换了个名,在debugger时直接使用window.查出来了一个pdfjsLib,改名后调试果然通过,原来PDFJS换成了pdfjsLib
1.2.2 jquery这个插件,引用时需要去掉build/webpack.base.conf.js中的$、jquery(我这里也引用了moment,所以也去掉了)
...
new webpack.ProvidePlugin({
// $: "jquery",
// jQuery: "jquery",
// moment:"moment"
})
...
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
// jquery: "jquery",
// moment:"moment"
}
}
...
然后在package.json 内部加上一段过滤的设定
...
"externals": {
"jQuery": "jquery",
"moment": "moment"
},
...
1.3 至于其他的内置cityData.js和city.js实在没办法,单独打包也很大,除非自己做一个cdn,这里没有条件也就没有处理了
1.4 最后这个月27号,定了下需要调用接口提供了,也就省了这两个大的js了,更加灵活的按需引用
2. 让浏览器选择gzip
2.1 gzip可以让浏览器选择加载.gz的文件进行浏览器端解压使用对应的文件,让请求的数据包更小 ,也是先上2个图

(上图C为普通打包,下图D为gzip压缩)

由以上的图C和图D可看到,就取3.js看,分别是67.1kb,14.1kb,77.9%的压缩率,不过gzip的运用需要浏览器的支持的,IE不支持,不过用到了移动端就不考虑IE了;
至于使用,其实vue-cli也是有配置的,不过对应的组件并没有加进去,但是配置地方已经有了,打开build/index.js
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: true,
productionGzipExtensions: ['js', 'css'],
注释说的很明白,如果需要开通gzip,需要引用compression-webpack-plugin,那么我们按照提示执行:npm install --save-dev compression-webpack-plugin ,不过可能又出问题了,打包报错,提示说没找到对应的方法,查了下原因,compression-webpack-plugin的新版本已经改了配置方式,这里看网友说需要修改assets换成filename,可以搜下,但是不起作用,我就直接重新安装了1.x版本的进去了,终于好了
vue-cli 打包优化的更多相关文章
- vue cli 打包项目造成css背景图路径错误
vue cli做项目的时候难免会碰到,css引用背景图或者css,js之间的相互引用!!!这时候打包后可能会出现一个错误!!如下图: 写法: 错误: 会无端多出一个“/css/static/” 这样就 ...
- Vue Cli 打包之后静态资源路径不对的解决方法
cli2版本: 将 config/index.js 里的 assetsPublicPath 的值改为 './' . build: { ... assetsPublicPath: './', ... } ...
- vue cli 3
介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统 通过 @vue/cli 搭建交互式的项目脚手架. 通过 @vue/cli + @vue/cli-service-global 快 ...
- Vue -- vue-cli(vue脚手架) npm run build打包优化
这段时间公司新项目立项,开发组选用 Vue2.0 进行开发.当然也就一并用到 vue cli 进行自动化构建.结果在基础版本开发完成后,用 npm run build 命令打包上线时,发现以下几个问题 ...
- [Vue 牛刀小试]:第十七章 - 优化 Vue CLI 3 构建的前端项目模板(1)- 基础项目模板介绍
一.前言 在上一章中,我们开始通过 Vue CLI 去搭建属于自己的前端 Vue 项目模板,就像我们 .NET 程序员在使用 asp.net core 时一样,我们更多的会在框架基础上按照自己的开发习 ...
- axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器
1.小小的提一下vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一道 ...
- vue cli 3 打包过大问题
vue cli 3 打包命令 npm run build,这种情况下的打包可以通过设置 vue.config.js里面的 productionSourceMap: false. 如果是自己设置的打包环 ...
- VUE cli 4.x下配置多页面以及同时配置支持element-ui及mint-ui并且优化首页文件大小。
场景,公司的一个小型项目,需同时支持移动端和PC端.最开始考虑做两个独立的项目.但后来考虑到总共只有4个功能页面,布署起来相对麻烦.所以决定做在一个项目里. 1.升级vue-cli到4.x npm i ...
- Vue Cli 3 打包上线 静态资源404问题解决方案
报错原因:静态资源丢失 解决方案 官方文档https://cli.vuejs.org/zh/config/#vue-config-js baseUrl 从 Vue CLI 3.3 起已弃用,请使用pu ...
- vue 打包优化
vue 打包优化 路由按需加载 通过vue写的单页应用时,可能会有很多的路由引入.当打包构建的时候,javascript包会变得非常大,影响加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后 ...
随机推荐
- RabbitMQ-基本概念(一)
整体架构模型 Producer 消息生产者,生产者创建消息然后发布到RabbitM中,消息一般包含2个部分 消息体(payload)和标签 消息体就是带有业务逻辑结构的数据,消息标签用来表述这条消息, ...
- [luoguP2875] [USACO07FEB]牛的词汇The Cow Lexicon(DP)
传送门 f[i] 表示前 i 个字符去掉多少个 的最优解 直接暴力DP ——代码 #include <cstdio> #include <cstring> #include & ...
- T1081 线段树练习 2 codevs
http://codevs.cn/problem/1081/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数, ...
- Spring Cloud(4):Feign的使用
基于上一篇文章:https://www.cnblogs.com/xuyiqing/p/10867739.html 使用Ribbon实现了订单服务调用商品服务的Demo 下面介绍如何使用Feign实现这 ...
- 工作流框架Activiti
最近在看一些项目设计方面的文章,涉及到了工作流技术,于是了解一下. 1.概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照 ...
- Ubuntu 16.04下轻量级文件搜索工具Catfish
Catfish搜索文件速度快,但是不支持正则表达式. 安装: sudo add-apt-repository ppa:catfish-search/ppa sudo apt-get update su ...
- 一起talk C栗子吧(第一百二十三回:C语言实例--显示变量和函数的地址)
各位看官们,大家好,上一回中咱们说的是多线程的样例.这一回咱们说的样例是:显示变量和函数的地址. 闲话休提,言归正转.让我们一起talk C栗子吧! 在编敲代码时,有时候须要获取程序中变量和函数的地址 ...
- 扩展VirtualBox中的centos硬盘大小
一.克隆文件 我之前安装的时候建的是centos 6.3.可是后来空间不够,没办法,又不想重装centos.由于好多东西要配置,特麻烦,所以先想到了使用resize命令,可是在win8中运行D:\Pr ...
- Andriod实现刮刮卡的效果
思想: 将一个View设计成多层,内层(包含中奖信息)和外层(用于刮奖),外层的图层用Canvas与一个Bitmap关联,用这个关联的Bitmap来处理手势的滑动.类似于刮奖的动作. 使用paint. ...
- 【源代码剖析】tornado-memcached-sessions —— Tornado session 支持的实现(二)
客官您最终回头了! 让我们本着探(zuo)索(si)精神把 session.py 看完吧... 首先看看须要的库: pickle 一个用于序列化反序列化的库(听不懂?你直接看成和 json 一样作用即 ...