vue项目开启Gzip压缩和性能优化操作


Posted in Javascript onOctober 26, 2020

vue 项目开启gzip自拍压缩和部署 nginx 开启gzip优化性能

第一步:在vue项目中安装依赖并将productionGzip改为true,开启Gzip压缩:

npm install --save-dev compression-webpack-plugin

第二步:运行 npm run build打包项目,这时可能会报错,提示ValidationError: Compression Plugin Invalid Options。

根据官网提示,需要将CompressionWebpackPlugin的设置由asset改为filename。

第三步:再次运行 npm run build打包项目,这时可能会继续报错,提示TypeError: Cannot read property 'emit' of undefined。据我查证,是安装的compression-webpack-plugin依赖有问题,需要卸载compression-webpack-plugin更改安装低版本 v1.1.12。

第四步:卸载当前安装的compression-webpack-plugin:

npm uninstall --save-dev compression-webpack-plugin

第五步:安装低版本compression-webpack-plugin:

npm install --save-dev compression-webpack-plugin@1.1.2

第六步:再次运行 npm run build打包项目,这时将正常包vue项目,愉(ku)快(bi)的j将vue开发上线了。

第七步:开启 nginx 服务端 gzip性能优化。找到nginx配置文件在 http 配置里面添加如下代码,然后重启nginx服务即可。

http:{ 

  gzip on; 
  gzip_static on;
  gzip_buffers 4 16k;
  gzip_comp_level 5;
  gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg 

     image/gif image/png;
}

注意:过程中可能出现的报错:

throw new ValidationError(ajv.errors, name);
 ^
ValidationError: Compression Plugin Invalid Options
options should NOT have additional properties
 at validateOptions (E:\workspace\webpack-stack\analyze-demo\node_modules\compression-webpack-plugin\node_modules\schema-utils\src\validateOptions.js:32:11)
building for production...E:\workspace\webpack-stack\analyze-demo\node_modules\compression-webpack-plugin\dist\index.js:175
 compiler.hooks.emit.tapAsync({ name: 'CompressionPlugin' }, emit);
 
TypeError: Cannot read property 'emit' of undefined
 at CompressionPlugin.apply (E:\workspace\webpack-stack\analyze-demo\node_modules\compression-webpack-plugin\dist\index.js:175:20)

补充知识:vue填坑之webpack run build 静态资源找不到

vue cli搭建的项目,在本地测试调试都OK,运行npm run dev之后运行正常,今天放到服务器上跑,结果RD说找不到打包后的静态资源,浏览器控制台错误代码404

问了RD,因为服务器上线方式的调整,不会指定具体项目路径因此,

https://bigdata.yiche.com/static/css/app.149f36018149fcbe537f02cafdc6f047.css

这个文件找不到,看看我们正常打包好的目录:

vue项目开启Gzip压缩和性能优化操作

正确的访问路径是:

https://bigdata.yiche.com/deploy/static/css/app.149f36018149fcbe537f02cafdc6f047

config/index.js配置如图:

vue项目开启Gzip压缩和性能优化操作

思来想去之前打包好的文件直接扔到nginx就可以使用,实在不清楚原因。于是找到我们的美女组长姐姐来帮忙,分分钟改了config/index.js下的几行代码,如图:

vue项目开启Gzip压缩和性能优化操作

这里需要注意assetsPublicPath:'/deploy/' 末尾的斜杠一定要加,不然部分js打包后会出现

https://bigdata.yiche.com/deploystatic/css/app.149f36018149fcbe537f02cafdc6f047

这样的情况。

看下打包好的目录,对比之后会发现多了一层deploy目录,这个多出来的路径是index和assetsRoot这两个设置决定的

vue项目开启Gzip压缩和性能优化操作

而assetsPublicPath则是确定打包后的文件引用路径:看看打包后的index.html文件的js和css资源的引用路径:

vue项目开启Gzip压缩和性能优化操作

对比之前默认配置的路径:

vue项目开启Gzip压缩和性能优化操作

好了再放到服务器上,问题解决了。

问题总结:

原因是服务器没有指定项目目录,因此需要在打包时对打包文件添加访问的项目名称,所以在配置打包路径是要加上项目名称,下面是vue cli默认webpack config/index.js的配置解释

var path = require('path')
 
 module.exports = {
 build: { // production 环境
  env: require('./prod.env'), // 使用 config/prod.env.js 中定义的编译环境
  index: path.resolve(__dirname, '../dist/index.html'), // 编译输入的 index.html 文件
  assetsRoot: path.resolve(__dirname, '../dist'), // 编译输出的静态资源路径
  assetsSubDirectory: 'static', // 编译输出的二级目录
  assetsPublicPath: '/', // 编译发布的根目录,可配置为资源服务器域名或 CDN 域名
  productionSourceMap: true, // 是否开启 cssSourceMap
  // 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: false, // 是否开启 gzip
  productionGzipExtensions: ['js', 'css'] // 需要使用 gzip 压缩的文件扩展名
 },
 dev: { // dev 环境
  env: require('./dev.env'), // 使用 config/dev.env.js 中定义的编译环境
  port: 8080, // 运行测试页面的端口
  assetsSubDirectory: 'static', // 编译输出的二级目录
  assetsPublicPath: '/', // 编译发布的根目录,可配置为资源服务器域名或 CDN 域名
  proxyTable: {}, // 需要 proxyTable 代理的接口(可跨域)
  // CSS Sourcemaps off by default because relative paths are "buggy"
  // with this option, according to the CSS-Loader README
  // (https://github.com/webpack/css-loader#sourcemaps)
  // In our experience, they generally work as expected,
  // just be aware of this issue when enabling this option.
  cssSourceMap: false // 是否开启 cssSourceMap
 }
 }

本人个人理解,如有不对欢迎指出!

以上这篇vue项目开启Gzip压缩和性能优化操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript动态添加表格数据行(ASP后台数据库保存例子)
May 08 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
Aug 15 Javascript
javascript数组遍历的方法实例分析
Sep 13 Javascript
深入解析js轮播插件核心代码的实现过程
Apr 14 Javascript
Jquery把获取到的input值转换成json
May 15 jQuery
js阻止默认右键的下拉菜单方法
Jan 02 Javascript
D3.js实现简洁实用的动态仪表盘的示例
Apr 04 Javascript
Angular异步变同步处理方法
Aug 13 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 Javascript
Angular4.0动画操作实例详解
May 10 Javascript
js实现简单商品筛选功能
Feb 02 Javascript
html中两种获取标签内的值的方法
Jun 16 jQuery
Vue检测屏幕变化来改变不同的charts样式实例
Oct 26 #Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
Oct 26 #Javascript
vue下载二进制流图片操作
Oct 26 #Javascript
JavaScript如何操作css
Oct 24 #Javascript
javascript实现多边形碰撞检测
Oct 24 #Javascript
解决vue scoped html样式无效的问题
Oct 24 #Javascript
vue项目查看vue版本及cli版本的实现方式
Oct 24 #Javascript
You might like
2019十大人气国漫
2020/03/13 国漫
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python简单文本处理的方法
2015/07/10 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
利用Python如何生成便签图片详解
2018/07/09 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
2019年分享net面试的经历和题目
2016/08/07 面试题
大学生读书笔记范文
2015/07/01 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis