aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/webpack.config.dev.js
blob: fe5528cea6e9d0a07bc7b91e85b6ef353fda9373 (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
93
94
95
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const PnpWebpackPlugin = require('pnp-webpack-plugin');

const { commonRules, htmlCommonConfig } = require('./webpack.common');

module.exports = (env) => {
  const entry = ['react-hot-loader/patch', './src/app/index.tsx'];

  if (env && env.TIMELINE_USE_MOCK_BACKEND) {
    entry.push(path.join(__dirname, 'src/app/http/mock/install.ts'));
  }

  return {
    entry,
    mode: 'development',
    devtool: 'eval-cheap-module-source-map',
    module: {
      rules: [
        ...commonRules,
        {
          test: /\.ts(x?)$/,
          exclude: /node_modules/,
          use: [
            {
              loader: 'babel-loader',
              options: {
                plugins: ['react-hot-loader/babel'],
              },
            },
            {
              loader: 'ts-loader',
            },
          ],
        },
        {
          test: /\.js(x?)$/,
          exclude: /node_modules/,
          use: [
            {
              loader: 'babel-loader',
              options: {
                plugins: ['react-hot-loader/babel'],
              },
            },
          ],
        },
      ],
    },
    resolve: {
      alias: {
        'react-dom': '@hot-loader/react-dom',
      },
      extensions: ['*', '.js', '.jsx', '.ts', '.tsx'],
      plugins: [PnpWebpackPlugin],
    },
    resolveLoader: {
      plugins: [PnpWebpackPlugin.moduleLoader(module)],
    },
    optimization: {
      runtimeChunk: 'single',
      splitChunks: {
        chunks: 'all',
        cacheGroups: {
          vendor: {
            test: /[\\/]node_modules[\\/]/,
            name: 'vendors',
            chunks: 'all',
          },
        },
      },
    },
    output: {
      path: path.resolve(__dirname, 'dist/'),
      filename: '[name].[hash].js',
      chunkFilename: '[name].[hash].js',
      publicPath: '/',
    },
    devServer: {
      contentBase: path.resolve(__dirname, 'public/'),
      host: '0.0.0.0',
      port: 3000,
      historyApiFallback: true,
      hotOnly: true,
      allowedHosts: ['.myide.io'],
    },
    plugins: [
      new HtmlWebpackPlugin({
        ...htmlCommonConfig,
      }),
      new webpack.HotModuleReplacementPlugin(),
    ],
  };
};