summaryrefslogtreecommitdiff
path: root/webpack.config.site.js
blob: a4448582a0c59d3615d57e6144911adeb529bdab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
require("dotenv").config();

const webpack = require("webpack");
const path = require("path");
const TerserPlugin = require("terser-webpack-plugin");

module.exports = function (env) {
  console.log("Building live site (production)");
  if (env) console.log(env);
  const appTarget = (env && env.APP_TARGET) || "app";
  console.log("Using app target:", appTarget);
  return {
    mode: "production",
    entry: {
      main: "./frontend/site/index.js",
    },
    output: {
      path: path.resolve(__dirname, "static/js/dist"),
      filename: "bundle.js",
    },
    plugins: [
      new webpack.NormalModuleReplacementPlugin(
        /(.*)APP_TARGET(\.*)/,
        function (resource) {
          resource.request = resource.request.replace(
            /APP_TARGET/,
            `${appTarget}`
          );
        }
      ),
      new webpack.DefinePlugin({
        "process.env.NODE_ENV": JSON.stringify("production"),
        // 'process.env.S3_HOST': JSON.stringify(process.env.S3_HOST || ""),
        // 'process.env.API_HOST': JSON.stringify(process.env.API_HOST || ""),
        __REACT_DEVTOOLS_GLOBAL_HOOK__: "({ isDisabled: true })",
      }),
      new TerserPlugin({
        extractComments: true,
        parallel: true,
        terserOptions: {
          // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
          extractComments: "all",
          compress: {
            drop_console: true,
          },
        },
      }),
      new webpack.optimize.AggressiveMergingPlugin(),
      // new Visualizer({
      //   filename: './statistics.html'
      // })
    ],
    optimization: {
      minimize: true,
      minimizer: [
        new TerserPlugin({
          terserOptions: {
            compress: {
              // drop_console: true,
            },
          },
        }),
      ],
    },
    resolve: {
      alias: {
        // "react": "preact/compat",
        // "react-dom/test-utils": "preact/test-utils",
        // "react-dom": "preact/compat",
      },
    },
    devtool: "cheap-module-source-map",
    module: {
      rules: [
        {
          test: /\.css$/,
          use: ["style-loader", "css-loader"],
        },
        {
          test: /\.js$/,
          // include: path.resolve(__dirname, 'client'),
          exclude: /(node_modules|bower_components|build)/,
          loader: "babel-loader",
          options: {
            presets: ["@babel/preset-react"],
            plugins: ["@babel/plugin-transform-runtime"],
          },
        },
      ],
    },
  };
};