通过 npm run build 打包时候,会发现静态文件很大,放在nginx服务中访问页面会很慢,所以可在打包过程中对静态文件再压缩。

对js、css、html等文件进行压缩:

  • 安装插件 “compression-webpack-plugin” 。(我本地版本: cnpm install compression-webpack-plugin@5.0.1)
cnpm install compression-webpack-plugin
  • 配置 vue.config.js 文件:
const CompressionWebpackPlugin = require('compression-webpack-plugin');
const isProdOrTest = process.env.NODE_ENV !== 'development'


module.exports = {
    devServer: {
        host: '127.0.0.1',
        proxy: {
            '/': {
                target: 'http://127.0.0.1:8081/',
                pathRewrite: {
                    '^/': '', //重写,
                },
                changeOrigin: true, //是否允许跨域
            },
        },
    },

    productionSourceMap: false, // 设为false,既可以减少包大小,也可以加密源码
    chainWebpack(config) {
        //最小化代码
        config.optimization.minimize(true);
        //分割代码
        config.optimization.splitChunks({chunks: 'all'});
        //默认开启prefetch(预先加载模块),提前获取用户未来可能会访问的内容 在首屏会把这十几个路由文件,都一口气下载了 所以我们要关闭这个功能模块
        config.plugins.delete('prefetch'); 
        if (isProdOrTest) {
            // 对超过10kb的文件gzip压缩
            config.plugin('compressionPlugin').use(
                new CompressionWebpackPlugin({
                    test: /\.(js|css|html)$/, // 匹配文件名
                    filename: '[path].gz[query]', // 压缩后的文件名
                    algorithm: 'gzip', // 使用gzip压缩
                    minRatio: 1, // 压缩率小于1才会压缩
                    threshold: 10240,
                    deleteOriginalAssets: false //是否删除原文件
                })
            );
        };

    }
}


  • 此时运行 npm run build 会发现js、css目录中多出 .gz 的文件,此时放在nginx中,需要开启gzip配置,然后重启nginx。
    在这里插入图片描述
  • 访问页面时候,会发现js文件的类型是 gzip类型:
    在这里插入图片描述

针对图片资源进行压缩:

  • 安装插件 “image-webpack-loader” 。(我本地安装的是 6.0.0版本:cnpm install image-webpack-loader
    @6.0.0)
cnpm install image-webpack-loader
  • 配置 vue.config.js 文件:
const CompressionWebpackPlugin = require('compression-webpack-plugin');
const isProdOrTest = process.env.NODE_ENV !== 'development'


module.exports = {
    devServer: {
        host: '127.0.0.1',
        proxy: {
            '/': {
                target: 'http://127.0.0.1:8081/',
                pathRewrite: {
                    '^/': '', //重写,
                },
                changeOrigin: true, //是否允许跨域
            },
        },
    },

    productionSourceMap: false, // 设为false,既可以减少包大小,也可以加密源码
    chainWebpack(config) {
        //最小化代码
        config.optimization.minimize(true);
        //分割代码
        config.optimization.splitChunks({chunks: 'all'});
        //默认开启prefetch(预先加载模块),提前获取用户未来可能会访问的内容 在首屏会把这十几个路由文件,都一口气下载了 所以我们要关闭这个功能模块
        config.plugins.delete('prefetch'); 
        if (isProdOrTest) {
            // 对超过10kb的文件gzip压缩
            config.plugin('compressionPlugin').use(
                new CompressionWebpackPlugin({
                    test: /\.(js|css|html)$/, // 匹配文件名
                    filename: '[path].gz[query]', // 压缩后的文件名
                    algorithm: 'gzip', // 使用gzip压缩
                    minRatio: 1, // 压缩率小于1才会压缩
                    threshold: 10240,
                    deleteOriginalAssets: false //是否删除原文件
                })
            );
        };
      //开启图片压缩
        config.module.rule('images')
        .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
        .use('image-webpack-loader')
        .loader('image-webpack-loader')
        .options({ bypassOnDebug: true });
    }
}

  • 此时执行 npm run build 之后会发现图片资源会被压缩:
    压缩后:
    在这里插入图片描述
    压缩前:
    在这里插入图片描述

完毕。

Logo

前往低代码交流专区

更多推荐