forked from roginvs/space-rangers-quest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.js
122 lines (108 loc) · 3.26 KB
/
webpack.config.js
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
118
119
120
121
122
const webpack = require("webpack");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const ServiceWorkerWebpackPlugin = require("serviceworker-webpack-plugin");
// const WebpackVersionHashPlugin = require("webpack-version-hash-plugin");
const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
const devServer /*: webpackDevServer.Configuration */ = {
contentBase: "./built-web",
port: 4099,
hot: true,
disableHostCheck: true,
// inline: false, // for serviceWorker development tests
};
const config = (env, argv) => {
const MODE_DEVELOPMENT = argv.mode === "development";
const developmentModePlugins = MODE_DEVELOPMENT
? [
// TODO: Disable this for webworker development
// new webpack.HotModuleReplacementPlugin(),
new ForkTsCheckerWebpackPlugin({
tslint: true,
memoryLimit: 4096, // 2048 is default and this is not enough?
}),
]
: [];
return {
entry: {
index: "./src/ui/index.tsx",
worker: "./src/ui/worker/worker.ts",
serviceWorker: "./src/ui/serviceWorker.ts",
},
output: {
filename: "[name].js",
chunkFilename: "[id].js",
path: __dirname + "/built-web",
globalObject:
/* This is small workaround for workers scope and HotModuleReplacementPlugin */ MODE_DEVELOPMENT
? "this"
: undefined,
},
plugins: [
...developmentModePlugins,
new CopyWebpackPlugin([
{
from: "src/webstatic",
},
]),
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: "[name].css",
chunkFilename: "[id].css",
}),
//new WebpackVersionHashPlugin({
// filename: 'version.json',
// include_date: true
//}),
new webpack.DefinePlugin({
__VERSION__: JSON.stringify(new Date().toISOString()),
}),
new ServiceWorkerWebpackPlugin({
entry: "./src/ui/serviceWorker.ts",
filename: "sw.js",
}),
],
module: {
rules: [
{
enforce: "pre",
test: /\.(js|ts|tsx)$/,
loader: "source-map-loader",
exclude: /node_modules/,
},
{
test: /\.tsx?$/,
loader: "ts-loader",
options: {
transpileOnly: true, // IMPORTANT! use transpileOnly mode to speed-up compilation
compilerOptions: {
target: MODE_DEVELOPMENT ? "ES2018" : "es5",
downlevelIteration: MODE_DEVELOPMENT ? false : true,
module: "ESNext",
moduleResolution: "node",
},
},
exclude: /node_modules/,
},
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
{
test: /\.(png|svg|jpg|gif)$/,
use: ["file-loader?name=img/[hash].[ext]"],
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: ["file-loader?name=fonts/[hash].[ext]"],
},
],
},
resolve: {
extensions: [".ts", ".tsx", ".js", ".json"],
},
devServer,
};
};
module.exports = config;