webpack.prod.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /* eslint-disable */
  2. /**
  3. * @author: Yuki Takei <yuki@weseek.co.jp>
  4. */
  5. const path = require('path');
  6. /**
  7. * Webpack Plugins
  8. */
  9. const TerserPlugin = require('terser-webpack-plugin');
  10. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  11. const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
  12. const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
  13. /**
  14. * Webpack Constants
  15. */
  16. const { ANALYZE_BUNDLE_SIZE } = process.env;
  17. module.exports = require('./webpack.common')({
  18. mode: 'production',
  19. devtool: undefined,
  20. output: {
  21. filename: '[name].[chunkhash].bundle.js',
  22. chunkFilename: '[name].[chunkhash].chunk.js',
  23. },
  24. module: {
  25. rules: [
  26. {
  27. test: /\.(css|scss)$/,
  28. use: [
  29. MiniCssExtractPlugin.loader,
  30. 'css-loader',
  31. {
  32. loader: 'postcss-loader',
  33. options: {
  34. sourceMap: false,
  35. postcssOptions: {
  36. plugins: [
  37. require('autoprefixer')(),
  38. ],
  39. },
  40. },
  41. },
  42. 'sass-loader',
  43. ],
  44. exclude: [path.resolve(__dirname, '../src/client/legacy')],
  45. },
  46. {
  47. test: /\.(css|scss)$/,
  48. use: ['style-loader', 'css-loader', 'sass-loader'],
  49. include: [path.resolve(__dirname, '../src/client/legacy')],
  50. },
  51. ],
  52. },
  53. plugins: [
  54. new MiniCssExtractPlugin({
  55. filename: '[name].[hash].css',
  56. }),
  57. new BundleAnalyzerPlugin({
  58. analyzerMode: ANALYZE_BUNDLE_SIZE ? 'static' : 'disabled',
  59. reportFilename: path.resolve(__dirname, '../report/bundle-analyzer.html'),
  60. openAnalyzer: false,
  61. }),
  62. ],
  63. optimization: {
  64. minimize: true,
  65. minimizer: [
  66. new TerserPlugin({}),
  67. new OptimizeCSSAssetsPlugin({}),
  68. ],
  69. },
  70. });