1.安装插件
首先安装 compression-webpack-plugin
插件,用于在构建时生成 .gz
压缩文件:
css
bash
深色版本
npm install compression-webpack-plugin --save-dev
2. 配置 vue.config.js
在 Vue 项目根目录下创建或修改 vue.config.js
,添加以下配置:
javascript
javascript
深色版本
const CompressionWebpackPlugin = require('compression-webpack-plugin');
module.exports = {
// 其他配置...
configureWebpack: {
plugins: [
new CompressionWebpackPlugin({
// 压缩算法(默认gzip)
algorithm: 'gzip',
// 匹配需要压缩的文件类型(如JS、CSS、HTML等)
test: /.(js|css|html|svg|json)$/,
// 只压缩大于该值的文件(单位:字节,10KB)
threshold: 10240,
// 压缩率阈值(压缩后小于原文件的80%才会生成.gz文件)
minRatio: 0.8,
// 是否删除原始未压缩文件(生产环境建议设为false,保留原始文件)
deleteOriginalAssets: false,
// 自定义压缩后的文件名(如:main.js → main.js.gz)
filename: (path) => `${path}.gz`,
}),
],
},
};
3. 构建项目
执行构建命令生成压缩文件:
arduino
bash
深色版本
npm run build
构建完成后,dist
目录下会生成原始文件(如 app.js
)和对应的 .gz
压缩文件(如 app.js.gz
)。
二、服务器配置(以 Nginx 为例)
1. 启用 Nginx 的 Gzip 支持
在 Nginx 配置文件中(通常位于 /etc/nginx/nginx.conf
或站点配置文件中),添加或修改以下配置:
bash
nginx
深色版本
http {
# 开启Gzip压缩
gzip on;
# 设置压缩的最小文件大小(1KB)
gzip_min_length 1k;
# 压缩级别(1-9,推荐6,平衡压缩率和CPU消耗)
gzip_comp_level 6;
# 压缩缓冲区大小
gzip_buffers 16 64k;
# 需要压缩的文件类型
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
# 兼容代理服务器
gzip_proxied any;
# 添加Vary头,避免缓存问题
gzip_vary on;
# 启用预压缩文件(直接使用已生成的.gz文件)
gzip_static on;
}
2. 重启 Nginx
bash
深色版本
sudo nginx -s reload
三、Apache 配置(可选)
如果使用 Apache,需确保已启用 mod_deflate
模块:
bash
apache
深色版本
<IfModule mod_deflate.c>
# 启用压缩
AddOutputFilterByType DEFLATE text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml
# 排除已压缩的文件类型(如图片)
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
</IfModule>
四、验证 Gzip 是否生效
1. 检查 Network 面板
- 打开浏览器开发者工具(F12),切换到 Network 标签。
- 刷新页面,查看请求的响应头,确认
Content-Encoding: gzip
存在。 - 对比压缩前后的文件大小(如
app.js
和app.js.gz
)。
2. 使用在线工具测试
通过工具如 GIDZip Test 或 WebPageTest 检查压缩效果。
五、注意事项
-
预压缩 vs 实时压缩:
- 预压缩 :通过 Webpack 生成
.gz
文件,Nginx 直接返回,减少服务器 CPU 负担(推荐)。 - 实时压缩:Nginx 动态压缩文件,适合动态生成内容,但可能增加 CPU 使用率。
- 预压缩 :通过 Webpack 生成
-
删除原始文件:
- 如果设置
deleteOriginalAssets: true
,构建时会删除未压缩的原始文件,但需确保服务器支持直接读取.gz
文件(如配置gzip_static on
)。
- 如果设置
-
压缩级别:
- 压缩级别
gzip_comp_level
越高,文件越小但 CPU 负担越大,建议设为6
。
- 压缩级别
-
缓存问题:
- 清除浏览器缓存后重新测试,确保加载的是压缩后的文件。
六、完整示例
1. vue.config.js
完整配置
javascript
javascript
深色版本
const CompressionWebpackPlugin = require('compression-webpack-plugin');
module.exports = {
chainWebpack: config => {
config.when(process.env.NODE_ENV === 'production', config => {
config
.plugin('compression')
.use(CompressionWebpackPlugin, [{
algorithm: 'gzip',
test: /.(js|css|html|svg|json)$/,
threshold: 10240,
minRatio: 0.8,
deleteOriginalAssets: false,
filename: (path) => `${path}.gz`,
}]);
});
},
};
2. Nginx 配置片段
ini
nginx
深色版本
server {
listen 80;
server_name yourdomain.com;
root /path/to/dist;
location / {
try_files $uri $uri/ /index.html;
}
# 启用预压缩文件
gzip_static on;
}
通过以上步骤,你的项目体积将会得到大幅减小,就可以纵享丝滑啦!