Vue CLI 开启gzip压缩

31 篇文章 0 订阅

gizp压缩是一种http请求优化方式,通过减少文件体积来提高加载速度。html、js、css文件甚至json数据都可以用它压缩,可以减小60%以上的体积。
webpack在打包时可以借助 compression webpack plugin 实现gzip压缩,首先需要安装该插件:

下载webpack

npm install webpack@4.46.0 --save-dev

下载 compression-webpack-plugin 插件

npm install compression-webpack-plugin@6.1.1 --save-dev
//seo模块开始
const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
const webpack = require('webpack')
const path = require('path')
//seo模块结束
const CompressionPlugin = require('compression-webpack-plugin');

module.exports = {
    publicPath: "./",
    outputDir: "dist",
    assetsDir: "static",
    filenameHashing: true,
    productionSourceMap: false,//去掉索引
    lintOnSave: true,
    configureWebpack:config=>{
        if(process.env.NODE_ENV=='production'){
            return{
                plugins: [
                    new CompressionPlugin({
                        algorithm: 'gzip', // 使用gzip压缩
                        test: /\.js$|\.html$|\.css$/, // 匹配文件名
                        filename: '[path].gz[query]', // 压缩后的文件名(保持原文件名,后缀加.gz)
                        minRatio: 1, // 压缩率小于1才会压缩
                        threshold: 10240, // 对超过10k的数据压缩
                        deleteOriginalAssets: false, // 是否删除未压缩的源文件,谨慎设置,如果希望提供非gzip的资源,可不设置或者设置为false(比如删除打包后的gz后还可以加载到原始资源文件)
                    }),
                ],
            }
        }
    },
    pages: {
        index: {
            // 入口文件
            entry: 'src/main.js',  /*这个是根入口文件*/
            // 模板文件
            template: 'public/index.html',
            // 输出文件
            filename: 'index.html',
            // 页面title
            title: 'Index Page'
        },
        subpage: 'src/main.js'    /*注意这个是*/
    },
    //打包配置结束
    devServer: {
        https: false, //协议
        open: true, //启动服务时自动打开浏览器访问
        proxy: { // 开发环境代理配置
            [process.env.VUE_APP_BASE_API]: {
                // 目标服务器地址,代理访问 http://localhost:8001
                target: process.env.VUE_APP_SERVICE_URL,
                changeOrigin: true, // 开启代理服务器,
                pathRewrite: {
                    // 将 请求地址前缀 /dev-api 替换为 空的,
                    ['^' + process.env.VUE_APP_BASE_API]: ''
                }
            }
        }
    },

    transpileDependencies: ['webpack-dev-server/client', 'swiper', 'dom7'],
    chainWebpack: config => {
        config.entry.app = ['@babel/polyfill', './src/main.js'];
    },
    css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require('postcss-pxtorem')({
                        // 把px单位换算成rem单位
                        rootValue: 108, // // 设计稿宽度的1/10
                        selectorBlackList: ['weui', 'mu'], // 忽略转换正则匹配项
                        propList: ['*'] // 需要做转化处理的属性,如`hight`、`width`、`margin`等,`*`表示全部
                    })
                ]
            }
        }
    },

    //seo模块开始
    configureWebpack: config => {
        if (process.env.NODE_ENV !== 'production') return;
        return {
            plugins: [
                new PrerenderSPAPlugin({
                    // 生成文件的路径,也可以与webpakc打包的一致。
                    // 下面这句话非常重要!!!
                    // 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
                    staticDir: path.join(__dirname, 'dist'),
                    // 对应自己的路由文件,比如a有参数,就需要写成 /a/param1。
                    routes: ['/'],
                    // 这个很重要,如果没有配置这段,也不会进行预编译
                    renderer: new Renderer({
                        inject: {
                            foo: 'bar'
                        },
                        headless: false,
                        renderAfterDocumentEvent: 'render-event'
                    })
                }),
            ],
        };
    }

    //seo模块结束
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值