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"),
- },
- },
- },
- };
|