aboutsummaryrefslogtreecommitdiff
path: root/webpack.config.js
blob: bd1d3b5a9418baede97ade15ae417ebb5d6dab75 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
var path = require('path');
var webpack = require('webpack');
const CopyWebpackPlugin = require("copy-webpack-plugin");
const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");

const plugins = [
    new CopyWebpackPlugin([{
        from: "deploy",
        to: path.join(__dirname, "build")
    }]),
    new ForkTsCheckerWebpackPlugin({
        tslint: true,
        useTypescriptIncrementalApi: true
    }),
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.HotModuleReplacementPlugin(),
];

function transferEnvironmentVariables() {
    const prefix = "_CLIENT_";
    const {
        parsed
    } = require('dotenv').config();
    if (!parsed) {
        return;
    }
    const resolvedClientSide = Object.keys(parsed).reduce((mapping, envKey) => {
        if (envKey.startsWith(prefix)) {
            mapping[`process.env.${envKey.replace(prefix, "")}`] = JSON.stringify(parsed[envKey]);
        }
        return mapping;
    }, {});
    plugins.push(new webpack.DefinePlugin(resolvedClientSide));
}

transferEnvironmentVariables();

module.exports = {
    mode: 'development',
    entry: {
        bundle: ["./src/client/views/Main.tsx", 'webpack-hot-middleware/client?reload=true'],
        viewer: ["./src/debug/Viewer.tsx", 'webpack-hot-middleware/client?reload=true'],
        repl: ["./src/debug/Repl.tsx", 'webpack-hot-middleware/client?reload=true'],
        test: ["./src/debug/Test.tsx", 'webpack-hot-middleware/client?reload=true'],
        inkControls: ["./src/mobile/InkControls.tsx", 'webpack-hot-middleware/client?reload=true'],
        imageUpload: ["./src/mobile/ImageUpload.tsx", 'webpack-hot-middleware/client?reload=true'],
    },
    optimization: {
        noEmitOnErrors: true
    },
    devtool: "source-map",
    node: {
        fs: 'empty',
        module: 'empty',
        dns: 'mock',
        tls: 'mock',
        net: 'mock'
    },
    output: {
        filename: "[name].js",
        path: path.resolve(__dirname, "build"),
        publicPath: "/"
    },
    resolve: {
        extensions: ['.js', '.ts', '.tsx']
    },
    module: {
        rules: [{
            test: [/\.tsx?$/],
            use: [{
                loader: 'ts-loader',
                options: {
                    transpileOnly: true
                }
            }]
        },
        {
            test: /\.scss|css$/,
            use: [{
                loader: "style-loader"
            },
            {
                loader: "css-loader"
            },
            {
                loader: "sass-loader"
            }
            ]
        },
        {
            test: /\.(jpg|png|pdf)$/,
            use: [{
                loader: 'file-loader'
            }]
        },
        {
            test: /\.(png|jpg|gif)$/i,
            use: [{
                loader: 'url-loader',
                options: {
                    limit: 8192
                }
            }]
        }
        ]
    },
    plugins,
    externals: [
        'child_process'
    ]
};