| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | /* * @Author: your name * @Date: 2020-10-14 15:24:16 * @LastEditTime: 2022-01-20 11:38:21 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \vue3-element-sysu-map\vue.config.js */const config = require("./src/config");const webpack = require("webpack");const path = require('path')function resolve(dir) {    return path.join(__dirname, '.', dir)}const TerserPlugin = require("terser-webpack-plugin");const CompressionWebpackPlugin = require("compression-webpack-plugin");let scssVariables = require("./src/styles/variables.scss.js");const Icons = require("unplugin-icons/webpack")const IconsResolver = require("unplugin-icons/resolver")module.exports = {    publicPath: "",    productionSourceMap: false,    devServer: {        setupMiddlewares: (middlewares, devServer) => {            if (config.dev_mock) {                const mock_server = require("./src/api/mock-server.js");                mock_server(devServer.app);            }            return middlewares;        },        proxy: {            '/ws': {                target: 'https://apis.map.qq.com',                changeOrigin: true,                ws: false,            }        },        host: '127.0.0.1',        port: '8081',        https: false,        open: false // 配置自动启动浏览器    },    chainWebpack: (config) => {        config.resolve.symlinks(true);        config.plugin("provide").use(webpack.ProvidePlugin, [            {                XE: "xe-utils",            },        ]);        config.plugin("define").use(webpack.DefinePlugin, [            {                VE_ENV: {                    MODE: JSON.stringify(process.env.NODE_ENV),                    SERVER: JSON.stringify(process.env.SERVER),                    PYSERVER: JSON.stringify(process.env.PYSERVER)                },            },        ]);    },    configureWebpack: () => {        let baseConfig = {            plugins: [                Icons({ compiler: 'vue3' }),            ],        };        let envConfig = {};        if (process.env.NODE_ENV === "production") {            // 为生产环境修改配置...            envConfig = {                optimization: {                    splitChunks: {                        chunks: "all",                        // enforceSizeThreshold: 20000,                        cacheGroups: {                            echarts: {                                name: "chunk-echarts",                                priority: 20,                                test: /[\\/]node_modules[\\/]_?echarts(.*)/,                            },                            elementPlus: {                                name: "chunk-elementPlus",                                priority: 20,                                test: /[\\/]node_modules[\\/]_?element-plus(.*)/,                            },                            elementPlusIcon: {                                name: "chunk-elementPlusIcon",                                priority: 20,                                test: /[\\/]node_modules[\\/]_?@element-plus[\\/]icons(.*)/,                            },                            mockjs: {                                name: "chunk-mockjs",                                priority: 20,                                test: /[\\/]node_modules[\\/]_?mockjs(.*)/,                            },                        },                    },                },                externals: {                    // lodash: "_"                },                plugins: [                    new TerserPlugin({                        terserOptions: {                            compress: {                                drop_console: false,                                drop_debugger: true,                            },                        },                    }),                    new CompressionWebpackPlugin({                        filename: "[path][base].gz",                        algorithm: "gzip",                        // test: /\.js$|\.html$|\.json$|\.css/,                        test: /\.js$|\.json$|\.css/,                        threshold: 10240, // 只有大小大于该值的资源会被处理                        minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理                        // deleteOriginalAssets: true // 删除原文件                    }),                    Icons({ compiler: 'vue3' }),                ],            };        }        return Object.assign(baseConfig, envConfig);    },    css: {        loaderOptions: {            scss: {                // 注意:在 sass-loader v8 中,这个选项名是 "prependData"                // additionalData: `@import "~@/styles/imports.scss";`                additionalData: Object.keys(scssVariables)                    .map((k) => `$${k.replace("_", "-")}: ${scssVariables[k]};`)                    .join("\n"),            },        },    },};
 |