const path = require('path')

// 导入compression-webpack-plugin 开启gzip
const CompressionWebpackPlugin = require('compression-webpack-plugin')
// 定义压缩文件类型
const productionGzipExtensions = ['js', 'css']

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

module.exports = {
  publicPath: '/',
  lintOnSave: true,
  // 打包时不生成.map文件
  productionSourceMap: false,
  chainWebpack: (config) => {
    // 配置静态资源图片
    config.module.rules.delete('images')
    // 清除svg默认的处理方式
    config.module.rules.delete('svg')
    config.plugin('html').tap(args => {
      args[0].title = 'Elevate Imaging'
      return args
    })
  },
  configureWebpack: {
    devtool: 'source-map',
    resolve: {
      extensions: ['.js', '.vue', '.json'], // 当引入文件时默认先找.js后缀的文件，没找到再从左往右继续
      alias: {
        vue$: 'vue/dist/vue.esm.js',
        '@': resolve('src')
      }
    },
    plugins: [
      new CompressionWebpackPlugin({
        filename: '[path].gz[query]',
        algorithm: 'gzip',
        test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'), // 匹配文件名
        threshold: 10240, // 对10K以上的数据进行压缩
        minRatio: 0.8,
        deleteOriginalAssets: false // 是否删除源文件
      })
      // new WebpackAliyunOss({
      //   from: ['./dist/**'], // 上传那个文件或文件夹  可以是字符串或数组
      //   dist: "/tydist",  // 需要上传到oss上的给定文件目录
      //   region: "oss-cn-hangzhou",
      //   accessKeyId: "LTAI5tGR1NwGgA9fBQGxbUVa",
      //   accessKeySecret: "Xp4kbhFoEywD9aHQVopnThiyZbBQBp",
      //   bucket: "hbbwgczx",
      //   overwrite: true,    // 是否需要覆盖bucket上的同名文件
      //   // test: true,
      //   //上面一行，可以在进行测试看上传路径是否正确, 打开后只会显示上传路径并不会真正上传;
      //   // 因为文件标识符 ""  和 "/" 的区别 不进行 setOssPath配置,上传的文件夹就会拼到文件名上, 丢失了文件目录,所以需要对setOssPath 配置。
      //   setOssPath: filePath => {
      //     let index = filePath.lastIndexOf("dist");
      //     let Path = filePath.substring(index + 4, filePath.length);
      //     return Path.replace(/\\/g, "/");
      //   },
      //   setHeaders: filePath => {
      //     return {
      //       "Cache-Control": "max-age=31536000"
      //     };
      //   }
      // })
    ],
    performance: {
      hints: false
    },
    module: {
      rules: [
        {
          test: /\.svg$/,
          loader: 'svg-sprite-loader',
          include: [resolve('src/static/icons')],
          options: {
            symbolId: 'icon-[name]'
          }
        },
        {
          test: /\.(png|jpe?g|gif|webp|svg)(\?.*)?$/,
          exclude: [resolve('src/static/icons')],
          use: [
            {
              loader: 'url-loader',
              options: {
                limit: 4096,
                fallback: {
                  loader: 'file-loader',
                  options: {
                    name: 'img/[name].[hash:8].[ext]'
                  }
                }
              }
            }
          ]
        }
      ]
    }
  },
  devServer: {
    // https: true,
    host: '0.0.0.0',
    port: 9528,
    proxy: {
      [process.env.VUE_APP_BASE_API]: {
        target: 'http://123.56.94.154:9530',
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: '/api/v1'
        }
      },
      '/img_url': {
        target: 'http://123.56.94.154:9530',
        changeOrigin: true,
        pathRewrite: {
          '^/img_url': ''
        }
      }
    }
  }
}
