# alias

配置别名可以加快webpack查找模块的速度

  • 每当引入bootstrap模块的时候,它会直接引入bootstrap,而不需要从node_modules文件夹中按模块的查找规则查找

# alias 在 vue cli 的具体实现 :

config.resolve.alias.set('@', resolve('src')) 

const path = require('path')
const resolve = dir => path.join(__dirname, dir)
const webpack = require('webpack')

const SpeedMeasureWebpackPlugin = require('speed-measure-webpack-plugin');
const smp = new SpeedMeasureWebpackPlugin({
  outputFormat:"human",
});
// gzip压缩
// const CompressionWebpackPlugin = require('compression-webpack-plugin')
// const productionGzipExtensions = ['html', 'js', 'css', 'png']
// const compress = new CompressionWebpackPlugin(
//   {
//     filename: info => {
//       return `${info.path}.gz${info.query}`
//     },
//     algorithm: 'gzip',
//     threshold: 10240,
//     test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
//     minRatio: 0.8,
//     deleteOriginalAssets: false
//   }
// )

module.exports = {
  publicPath: '/console/',
  // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建
  productionSourceMap: false,
  chainWebpack: config => {
    config.optimization.splitChunks({
      cacheGroups: {
        common: {
          name: 'chunk-common', // 打包后的文件名
          chunks: 'initial',
          minChunks: 2,
          maxInitialRequests: 5,
          minSize: 0,
          priority: 1,
          reuseExistingChunk: true
        },
        vendors: {
          name: 'chunk-vendors',
          test: /[\\/]node_modules[\\/]/,
          chunks: 'initial',
          priority: 2,
          reuseExistingChunk: true,
          enforce: true
        },
        moment: {
          name: 'chunk-moment',
          test: /[\\/]node_modules[\\/]moment[\\/]/,
          chunks: 'initial',
          priority: 4,
          reuseExistingChunk: true,
          enforce: true
        },
        antDesignVue: {
          name: 'chunk-ant-design-vue',
          test: /[\\/]node_modules[\\/]ant-design-vue[\\/]/,
          chunks: 'initial',
          priority: 5,
          reuseExistingChunk: true,
          enforce: true
        }
      }
    })
    config.plugin('webpack-bundle-analyzer')
      .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
    // js文件最小化处理
    config.optimization.minimize(true)
    config.plugin('ContextReplacementPlugin').use(webpack.ContextReplacementPlugin, [/moment[/\\]locale$/, /zh-cn/])
    config.resolve.alias.set('@', resolve('src'))
    // 添加全局变量
    config.plugin('define').tap(args => {
      args[0]['process.env']['static'] = process.env.static
      return args
    })
    // config.optimization.minimize(true);
    // config.optimization.splitChunks({
    //   chunks: 'all'
    // })
    // //压缩图片
    config.module
      .rule('images')
      .use('image-webpack-loader')
      .loader('image-webpack-loader')
      .options({
        bypassOnDebug: true
      })
      .end()
  },
  configureWebpack: smp.wrap({
    plugins: [],
    resolve: {
       extensions: [".js",".jsx",".json",".css"]
    }

    // let myConfig = {}
    // // 修改sourceMap模式
    // myConfig.devtool = 'cheap-module-source-map'
    // return myConfig
  })
}