webpack.client.conf.js 1.53 KB
const webpack = require('webpack');
const merge = require('webpack-merge');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const VueSSRClientPlugin = require('vue-server-renderer/client-plugin');
const pkg = require('../package.json');
let baseConfig = require('./webpack.base.conf');

const webpackConfig = merge(baseConfig, {
  entry: {
    app: './apps/entry-client.js'
  },
  optimization: {
    runtimeChunk: true,
    splitChunks: {
      maxAsyncRequests: Infinity,
      maxInitialRequests: Infinity,
      chunks: 'all',
      cacheGroups: {
        vendors: {
          priority: -10,
          chunks: 'all',
          name: 'vendors',
          test: /[\\/]node_modules[\\/]/
        },
        vue: {
          priority: 1,
          chunks: 'all',
          name: 'vue',
          test: /vue\.runtime\.esm/,
        },
        vuedep: {
          priority: 1,
          chunks: 'all',
          name: 'vuedep',
          test: /vue[-x]/,
        },
        swiper: {
          priority: 1,
          chunks: 'all',
          name: 'swiper',
          test: /swiper/,
        }
      }
    }
  },
  resolve: {
    alias: {
      'create-api': 'common/create-api-client.js'
    }
  },
  plugins: [
    new VueSSRClientPlugin({
      filename: `yoho-ssr-client-${pkg.version}.json`
    }),
    new webpack.DefinePlugin({
      'process.env.VUE_ENV': '"client"'
    })
  ]
});

if (process.argv.some(a => a === '--report')) {
  webpackConfig.plugins.push(new BundleAnalyzerPlugin());
}

module.exports = webpackConfig;