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
112
113
114
115
116
117
|
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'],
mobileInterface: ["./src/mobile/MobileMain.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: /\.(woff|woff2|ttf|eot|otf|svg)$/,
use: 'file-loader?name=fonts/[name].[ext]!static'
},
{
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
}
}]
}
],
noParse: [require.resolve('typescript/lib/typescript.js')],
},
plugins,
externals: [
'child_process'
]
};
|