const CompressionPlugin = require('compression-webpack-plugin')

// 获取 package.json 中的 name 标识
const packageName = require('./package.json').name.split('-')[1]

const path = require('path')

function resolve(dir) {
  return path.join(__dirname, dir)
}

module.exports = {
  // 生产环境关闭 SourceMap，加速构建。
  productionSourceMap: false,

  // build 打包路径
  outputDir: process.env.VUE_APP_OUTPUT_DIR,

  // 生产环境服务器路径 router ➡ history
  publicPath: process.env.VUE_APP_PUBLIC_PATH,

  // Webpack 配置
  configureWebpack: config => {
    // 微应用配置 ➡ 固定配置，不要修改！！！
    config.output = {
      ...config.output,
      library: `${packageName}-[name]`,
      libraryTarget: 'umd', // 把微应用打包成 umd 库格式
      jsonpFunction: `webpackJsonp_${packageName}`
    }
    if (process.env.NODE_ENV !== 'development') {
      // 生产环境取消 console.log
      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
    }
  },

  // Webpack 配置
  chainWebpack: config => {
    config.resolve.alias.set('@', resolve('src'))

    if (process.env.NODE_ENV !== 'development') {
      config.plugin('compressionPlugin').use(
        new CompressionPlugin({
          test: /\.(js|css|less|scss|sass)$/, // 匹配文件名
          threshold: 10240, // 对超过10k的数据压缩
          deleteOriginalAssets: false // 不删除源文件
        })
      )
    }
  },

  // 向 CSS 相关的 loader 传递选项
  css: {
    loaderOptions: {
      less: {
        modifyVars: {
          'primary-color': '#1890ff',
          'link-color': '#1890ff',
          'info-color': '#1890ff',
          'success-color': '#52c41a',
          'warning-color': '#faad14',
          'error-color': '#f5222d',
          'border-radius-base': '4px'
        },
        javascriptEnabled: true
      }
    }
  },

  // 开发服务配置
  devServer: {
    port: 3000,
    hot: true,
    disableHostCheck: true,
    // host: 'localhost',
    headers: {
      // 主应用获取子应用时跨域响应头
      'Access-Control-Allow-Origin': '*'
    },
    proxy: {
      [process.env.VUE_APP_PROXY]: {
        target: process.env.VUE_APP_API,
        changeOrigin: true,
        ws: false,
        pathRewrite: path => path.replace(new RegExp(`^${process.env.VUE_APP_PROXY}`), '')
      }
    }
  }
}
