-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.config.js
199 lines (171 loc) · 3.96 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
'use strict';
const webpack = require('webpack');
const NODE_ENV = process.env.NODE_ENV || 'development';
const LANG = process.env.LANG || 'en';
/*
multicompilation: array of configs instead single config;
will be useful for diferent bundles
e.g: config for styles/scripts/images, for l10n
*/
//module.exports = [config01, config02, configN];
module.exports = {
/*
a base folder to write paths in "entry"
without it
*/
context: __dirname + '/src',
/*
module name(s)
*/
// string for single module
//entry: './home',
// object for lots of modules
entry: {
home: './home',
about: './about',
// our own common code;
// will be added to bundled "common.js" file
common: './common'
},
output: {
/*
dist folder
*/
path: __dirname + '/public',
/*
output filename
*/
// for single bundle
//filename: 'build.js',
// for individual files
// output: home.js, about.js, common.js ...
filename: '[name].js',
/*
a variable for access to module from global scope;
here will be "module.exports" code
*/
// for single bundle
//library: 'home',
// for individual files
library: '[name]'
},
/*
watch and recompilation only for development mode
*/
watch: NODE_ENV === 'development',
watchOptions: {
/*
a timeout before start build;
300 by default
*/
aggregateTimeout: 100
},
/*
source map options:
"cheap-source-map" - good for production (if that's need)
"cheap-inline-module-source-map" - good for development
*/
devtool: NODE_ENV === 'development' ? 'cheap-inline-module-source-map' : null,
plugins: [
/*
will send environment variables for using in bundled code
e.g: NODE_ENV=development webpack
if (process.env.NODE_ENV === 'development') { console.log('something'); }
*/
//new webpack.EnvironmentPlugin('NODE_ENV')
/*
use instead EnvironmentPlugin for more flexible setting
*/
new webpack.DefinePlugin({
NODE_ENV: JSON.stringify(NODE_ENV),
LANG: JSON.stringify(LANG)
// or
//LANG: JSON.stringify('"en"')
}),
/*
when errors happened, bundled files will not created
*/
new webpack.NoErrorsPlugin(),
/*
for separate a common parts to external file
*/
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
/*
if a common parts used at least in 2 modules
it will be an external file
*/
//minChunks: 2,
/*
a clear indication to which files need for common module
*/
//chunks: ['about', 'home']
})
],
resolve: {
/*
default module directory (if path not specified)
*/
modulesDirectories: ['node_modules'],
/*
which files will check
*/
extensions: ['', '.js', '.ts']
},
resolveLoader: {
modulesDirectories: ['node_modules'],
/*
a mask for finding loaders
*/
moduleTemplates: ['*-loader', '*'],
extensions: ['', '.js']
},
module: {
loaders: [
/*
babel loader
*/
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
// optional[]=runtime - separate Babel's utils to external module
// to prevent a duplication of code
loader: 'babel?optional[]=runtime',
query: {
presets: ['es2015']
}
},
/*
typescript loader
*/
{
test: /\.ts$/,
loader: 'ts'
}
]
}
};
/*
plugins for production mode
*/
if (NODE_ENV === 'production') {
module.exports.plugins.push(
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
drop_console: true,
unsafe: true
}
})
);
}
/*
show extra info about build
*/
// webpack --display-modules -v
/*
analyse statistic
*/
// 1. webpack --json --profile >stats.json
// 2. http://webpack.github.io/analyse/
// 3. open stats.json