美文网首页
vue.config.js

vue.config.js

作者: _ing_f909 | 来源:发表于2021-03-03 10:30 被阅读0次

    // vue.config.js

    const path =  require('path');

    const CompressionWebpackPlugin = require("compression-webpack-plugin"); // 开启gzip压缩, 按需引用

    const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i; // 开启gzip压缩, 按需写入

    const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin; // 打包分析

    const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV);

    const resolve = (dir) => path.join(__dirname, dir);

    module.exports = {

        publicPath: process.env.NODE_ENV === 'production' ? '/site/vue-demo/' : '/',  // 公共路径

        indexPath: 'index.html' , // 相对于打包路径index.html的路径

        outputDir: process.env.outputDir || 'dist', // 'dist', 生产环境构建文件的目录

        assetsDir: 'static', // 相对于outputDir的静态资源(js、css、img、fonts)目录

        lintOnSave: false, // 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码

        runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本

        productionSourceMap: !IS_PROD, // 生产环境的 source map

        parallel: require("os").cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。

        pwa: {}, // 向 PWA 插件传递选项。

        chainWebpack: config => {

            config.resolve.symlinks(true); // 修复热更新失效

            // 如果使用多页面打包,使用vue inspect --plugins查看html是否在结果数组中

            config.plugin("html").tap(args => {

                // 修复 Lazy loading routes Error

                args[0].chunksSortMode = "none";

                return args;

            });

            config.resolve.alias // 添加别名

                .set('@', resolve('src'))

                .set('@assets', resolve('src/assets'))

                .set('@components', resolve('src/components'))

                .set('@views', resolve('src/views'))

                .set('@store', resolve('src/store'));

            // 压缩图片

            // 需要 npm i -D image-webpack-loader

            config.module

                .rule("images")

                .use("image-webpack-loader")

                .loader("image-webpack-loader")

                .options({

                    mozjpeg: { progressive: true, quality: 65 },

                    optipng: { enabled: false },

                    pngquant: { quality: [0.65, 0.9], speed: 4 },

                    gifsicle: { interlaced: false },

                    webp: { quality: 75 }

                });

            // 打包分析

            // 打包之后自动生成一个名叫report.html文件(可忽视)

            if (IS_PROD) {

                config.plugin("webpack-report").use(BundleAnalyzerPlugin, [

                    {

                        analyzerMode: "static"

                    }

                ]);

            }

        },

        configureWebpack: config => {

            // 开启 gzip 压缩

            // 需要 npm i -D compression-webpack-plugin

            const plugins = [];

            if (IS_PROD) {

                plugins.push(

                    new CompressionWebpackPlugin({

                        filename: "[path].gz[query]",

                        algorithm: "gzip",

                        test: productionGzipExtensions,

                        threshold: 10240,

                        minRatio: 0.8

                    })

                );

            }

            config.plugins = [...config.plugins, ...plugins];

        },

        css: {

            extract: IS_PROD,

            requireModuleExtension: false,// 去掉文件名中的 .module

            loaderOptions: {

                    // 给 less-loader 传递 Less.js 相关选项

                    less: {

                        // `globalVars` 定义全局对象,可加入全局变量

                        globalVars: {

                            primary: '#333'

                        }

                    }

            }

        },

        devServer: {

                overlay: { // 让浏览器 overlay 同时显示警告和错误

                  warnings: true,

                  errors: true

                },

                host: "localhost",

                port: 8080, // 端口号

                https: false, // https:{type:Boolean}

                open: false, //配置自动启动浏览器

                hotOnly: true, // 热更新

                // proxy: 'http://localhost:8080'  // 配置跨域处理,只有一个代理

                proxy: { //配置多个跨域

                    "/api": {

                        target: "http://172.11.11.11:7071",

                        changeOrigin: true,

                        // ws: true,//websocket支持

                        secure: false,

                        pathRewrite: {

                            "^/api": "/"

                        }

                    },

                    "/api2": {

                        target: "http://172.12.12.12:2018",

                        changeOrigin: true,

                        //ws: true,//websocket支持

                        secure: false,

                        pathRewrite: {

                            "^/api2": "/"

                        }

                    },

                }

            }

    }

    转发来自:https://juejin.cn/post/6844904125885317133

    相关文章

      网友评论

          本文标题:vue.config.js

          本文链接:https://www.haomeiwen.com/subject/laqqqltx.html