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 相关文章推荐
你可能不再需要JQUERY
Mar 09 Javascript
javascript中的undefined 与 null 的区别  补充篇
Mar 17 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
Mar 11 Javascript
Javascript实现返回上一页面并刷新的小例子
Dec 11 Javascript
jquery中$each()方法的使用指南
Apr 30 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 Javascript
微信小程序 ecshop地址三级联动实现实例代码
Feb 28 Javascript
React路由管理之React Router总结
May 10 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
Nov 29 Javascript
实用Javascript调试技巧分享(小结)
Jun 18 Javascript
使用layui实现树形结构的方法
Sep 20 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
Jul 13 Javascript
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
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
PHP的ASP防火墙
2006/10/09 PHP
phpwind中的数据库操作类
2007/01/02 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
PHP安全下载文件的方法
2016/04/07 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
php根据命令行参数生成配置文件详解
2019/03/15 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
Prototype Class对象学习
2009/07/19 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
使用python绘制二维图形示例
2019/11/22 Python
Python tkinter常用操作代码实例
2020/01/03 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
UML设计模式笔试题
2014/06/07 面试题
PyQt 如何创建自定义QWidget
2021/03/24 Python
如何写好优秀的创业计划书
2014/01/30 职场文书
Python实现生活常识解答机器人
2021/06/28 Python