今天天气晴朗啊兄弟们,困扰2天的问题终于解决了~
事情过程是这样的(想要解决方案的直接拉到文章最后):
在一次公司的项目中,先是搭建了nuxt2的基础架构,然后页面画完后发布到了测试环境 npm run build && pm2 restart ...., 后来用analyze想优化一下项目体积,选了一下gzip,呀,可以啊小老弟,于是开始了gzip/br的配置之路。
首先在配置一下nuxt.config.js
const path = require("path");
const { env } = require("./env");
const CompressionPlugin = require("compression-webpack-plugin");
export default {
//.....
//.....
//.... //省略一堆配置
build: {
plugins: [
new CompressionPlugin({
test: /\.js$|\.html$|\.css/, // 匹配文件名
threshold: 10240, // 对超过10kb的数据进行压缩
deleteOriginalAssets: false, // 是否删除原文件
}),
],
},
modules: ["@nuxtjs/axios", "@nuxtjs/proxy", "nuxt-precompress"],
nuxtPrecompress: {
gzip: {
enabled: true,
filename: '[path].gz[query]',
threshold: 10240,
minRatio: 0.8,
compressionOptions: { level: 9 },
},
brotli: {
enabled: true,
filename: '[path].br[query]',
compressionOptions: { level: 11 },
threshold: 10240,
minRatio: 0.8,
},
enabled: true,
report: false,
test: /\.(js|css|html|txt|xml|svg)$/,
// Serving options
middleware: {
enabled: true,
enabledStatic: true,
encodingsPriority: ['br', 'gzip'],
},
},
};
如上图,主要用了compression-webpack-plugin和nuxt-precompress。
compression-webpack-plugin:主要用来将js压缩生成gzip或者br文件
nuxt-precompress:主要是压缩我们的js/html/css文件
配置好之后build一下,果然在.nuxt/dist/client里生成了压缩文件。一切正常,好,丢到服务器上
奇怪的事情来了,服务器的文件还是那么大,比如 elementui 是200多k,我本地在analyze里面的明明是20多k啊! 奔溃中~
中间试过nginx配置:
gzip_static on,
gzip_comp_level 4改成9,
都没有用,也试过关闭gzip on(蒙蔽了病急乱投医)......
全网无解······
后来我闲着在自己的服务器上也试着部署了一下,竟然是好的,perfect! 逆境求生啊
这就说明是缓存啊,我本地刷刷刷,清除·····没用啊,oh my god,闲着无事改了本地的端口号重启了一下,竟然好了,本地生效了···· 然后我贴着老脸去找运维换端口验证一下,卧槽!没用! 继续崩溃~
今天,也就是刚刚,我想着会不会是pm2的缓存,于是试着在我们测试环境 pm2 delete all,再npm run build ,再 pm2 restart .... 刷新一下页面,oh ,好啦~ (激动中)
··················································分割线·····················································
好了,废话有点长,直接说解决方案:
需要 pm2 delete all,npm run build 再pm2 restart ....