
// 优化配置：结合压缩和代码拆分，提高页面访问速度
const path = require("path");
const CompressionPlugin = require('compression-webpack-plugin');
function resolve(dir) {
  return path.join(__dirname, dir);
}
module.exports = {
//   lintOnSave: false,
  lintOnSave: true,
  parallel: true, // 启用并行编译
  productionSourceMap: false, // 禁用生产环境 source map，减少构建体积，提高页面加载速度
  // 合并配置：gzip压缩 + 代码拆分
  configureWebpack: {
    // 只在开发环境使用source map，生产环境不使用
    devtool: process.env.NODE_ENV === 'development' ? 'eval-cheap-module-source-map' : false,
    plugins: [
      new CompressionPlugin({
        algorithm: 'gzip',
        test: /\.(js|css|html)$/,
        threshold: 10240,
        minRatio: 0.8
      })
    ],
    optimization: {
      splitChunks: {
        chunks: 'all',
        cacheGroups: {
          // 拆分 echarts 库
          echarts: {
            name: 'chunk-echarts',
            test: /[\\/]node_modules[\\/]echarts[\\/]/,
            priority: 20,
            chunks: 'all'
          },
          // 其他第三方库
          // 拆分 quill 富文本编辑器
          quill: {
            name: 'chunk-quill',
            test: /[\\/]node_modules[\\/]quill[\\/]/,
            priority: 20,
            chunks: 'all'
          },
          // 拆分 pdf 相关库
          pdf: {
            name: 'chunk-pdf',
            test: /[\\/]node_modules[\\/](pdfh5|vue-pdf)[\\/]/,
            priority: 20,
            chunks: 'all'
          },
          // 拆分 高德地图
          amap: {
            name: 'chunk-amap',
            test: /[\\/]node_modules[\\/]vue-amap[\\/]/,
            priority: 20,
            chunks: 'all'
          },
          // 拆分 canvas 相关库
          canvas: {
            name: 'chunk-canvas',
            test: /[\\/]node_modules[\\/](canvas|dommatrix)[\\/]/,
            priority: 20,
            chunks: 'all'
          },
          // 拆分 微信 SDK
          weixin: {
            name: 'chunk-weixin',
            test: /[\\/]node_modules[\\/]weixin-js-sdk[\\/]/,
            priority: 20,
            chunks: 'all'
          },
          // 其他第三方库
          vendors: {
            name: 'chunk-vendors',
            test: /[\\/]node_modules[\\/]/,
            priority: 10,
            chunks: 'initial'
          }
        }
      }
    }
  },
  chainWebpack: (config) => {
    config.resolve.alias
      .set("@$", resolve("src"))
      .set("assets", resolve("src/assets"))
      .set("components", resolve("src/components"))
      .set("layout", resolve("src/layout"))
      .set("base", resolve("src/base"))
      .set("static", resolve("src/static"));
  },

  publicPath: "./",
};

