/* eslint-disable indent */
const { resolve } = require('path')
const StyleLintWebpackPlugin = require('stylelint-webpack-plugin')
const WindiCSSWebpackPlugin = require('windicss-webpack-plugin')
const { name } = require('./package')
module.exports = {
  // eslint-loader 是否在保存的时候检查
  publicPath: './', // vue-cli3.3+新版本使用
  lintOnSave: true,
  configureWebpack: {
    resolve: {
      alias: {
        '@': resolve('src'),
        '@dhtmlxgantt': resolve('public/static/js/dhtmlxgantt.js'),
        '@hidBpmn': resolve('package')
      }
    },
    output: {
      // 把子应用打包成 umd 库格式
      library: `${name}`,
      libraryTarget: 'umd',
      jsonpFunction: `webpackJsonp_${name}`,
    },
    devServer: {
      port: 8088, // 配置端口号
      open: true, // 默认打开
      disableHostCheck: false,
      headers: {			// 重点7：同重点1，允许子应用跨域
        'Access-Control-Allow-Origin': '*', // http://localhost:9529/
        'Cache-Control': 'no-cache'
      },
      proxy: {
        [process.env.VUE_APP_BASE_API]: {
          target: process.env.VUE_APP_PROXY_TARGET,
          changeOrigin: true,
          pathRewrite: {
            [`^${process.env.VUE_APP_BASE_API}`]: [process.env.VUE_APP_BASE_API],
          },
        },
      },
    },
    plugins: [
      new StyleLintWebpackPlugin({
        files: ['src/**/*.{js,jsx,ts,tsx,html,vue,css,scss}'],
        fix: true, // 是否自动修复,不建议
        cache: true, // 是否缓存
        emitErrors: false, // 不发出
        failOnError: false, // 不发出
      }),
      new WindiCSSWebpackPlugin(),
    ],
  },
  chainWebpack(config) {
    const {
      NODE_ENV
    } = process.env || {}
    config.module
    .rule('svg')
      .exclude.add(resolve(__dirname, 'src/icons'))
      .end()
    config.module
      .rule('icons')
        .test(/\.svg$/)
        .include
          .add(resolve(__dirname, 'src/icons'))
          .end()
        .use('svg-sprite-loader')
          .loader('svg-sprite-loader')
          .options({
            symbolId: 'icon-[name]'
          })
          .end()
        .use('svgo-loader')
          .loader('svgo-loader')
        .end()
  }
}

/**
 * cacheGroups即缓存组，其中的每一项缓存组都可以继承/覆盖之前提到的splitChunks参数值（如name、maxSize、minSize、maxInitialRequests、maxAsyncRequests等），
 * 除此之外还额外提供了三个配置，分别为：test, priority 和 reuseExistingChunk。
 * priority ：优先级，default：0；如果两个缓存组都需要将某一公共模块打包，为了不重复打包，肯定只能打包进入其中之一，那么优先考虑priority 高的。
 * reuseExistingChunk：是否重用已经存在的模块，default：true；例：如果在当前缓存组需要抽离出 jquery.js，但是 jquery.js已经被其它缓存组抽取出来了，那么将会重用已经抽取出来的 jquery.js。
 * test：function (module, chunks) | RegExp | string 在chunks的基础上，精确的选择那些公共模块应该被打包。
 */
