-
Notifications
You must be signed in to change notification settings - Fork 17
/
webpack.config.js
121 lines (119 loc) · 3.1 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
const path = require('path')
const fs = require('fs')
const webpack = require('webpack')
const StylelintPlugin = require('stylelint-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const ESLintPlugin = require('eslint-webpack-plugin')
module.exports = {
devtool: 'source-map',
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
optimization: {
minimizer: [
// keep the name when sending the error logging
new TerserPlugin({
terserOptions: {
keep_classnames: true,
keep_fnames: true,
mangle: false
}
})
]
},
performance: {
hints: false
},
devServer: {
static: {
directory: '.',
serveIndex: true,
watch: true
},
devMiddleware: {
publicPath: "/dist/",
},
watchFiles: [
'src/**/*',
'style/**/*',
'i18n/**/*',
'images/**/*'
]
},
plugins: [
new StylelintPlugin({
context: './style/',
files: '*.less',
fix: true
}),
new webpack.DefinePlugin({
APP_VERSION: JSON.stringify(JSON.parse(fs.readFileSync(process.env.MANIFEST_FILE || './manifest.webapp')).version),
CIRCLE_SHA1: JSON.stringify(process.env.CIRCLE_SHA1 || '-'),
INSTRUMENTATION: JSON.stringify(!!parseInt(process.env.INSTRUMENTATION)),
// "RANDOM" is already used in the terminal, so using just "RAND"
RANDOM: JSON.stringify(!!parseInt(process.env.RAND)),
TARGET_STORE: JSON.stringify(process.env.TARGET_STORE || 'kai'),
DISABLE_REQUEST_HEADER: JSON.stringify(!!parseInt(process.env.DISABLE_REQUEST_HEADER))
}),
new webpack.EnvironmentPlugin(),
new ESLintPlugin({
// enforce: 'pre',
extensions: 'jsx',
fix: true
})
],
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
plugins: [
[
"@babel/plugin-transform-react-jsx",
{
pragma: "h", // default pragma is React.createElement
pragmaFrag: "Fragment", // default is React.Fragment
throwIfNamespace: false // defaults to true
}
],
[
"module-resolver",
{
root: ["./src"],
alias: {
components: './src/components',
hooks: './src/hooks',
api: './src/api',
contexts: './src/contexts',
i18n: './i18n'
}
}
]
],
presets: [
[
"@babel/preset-env",
{
targets: "firefox 37"
}
]
]
}
}
},
{
test: /\.less$/,
use: [
'style-loader',
'css-loader',
{ loader: 'less-loader', options: { sourceMap: true } },
]
}
]
}
};