forked from sourcec0de/tree-mirror
-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.config.js
160 lines (139 loc) · 4.21 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
var webpack = require('webpack');
var path = require('path');
var chalk = require('chalk');
// Webpack plugins
var ProgressBarPlugin = require('progress-bar-webpack-plugin');
var CopyWebpackPlugin = require('copy-webpack-plugin');
// Collect environment variables
var env = process.env.NODE_ENV || 'dev';
// Resolve modules, source, build and static paths
var dir_src = path.resolve(__dirname, 'src');
var dir_build = path.resolve(__dirname, 'build');
var dir_static = path.resolve(__dirname, 'static');
var dir_modules = path.resolve(__dirname, 'node_modules');
// Webpack config
module.exports = {
// Source maps (helps with debugging)
devtool: env == 'dev' ? 'eval-source-map' : 'hidden-source-map',
// Entry point
entry: path.resolve(dir_src, 'index.js'),
// Bundle output, index.js is fine so you can do require('modulename');
// without explicitly calling the .js file
output: {
path: dir_build,
publicPath: "/",
filename: 'tree-mirror.js',
libraryTarget: 'this'
},
// Static directory for serve
devServer: {
contentBase: dir_static,
progress: true,
stats: 'errors-only',
watchOptions: {poll: 500},
host: process.env.HOST || '0.0.0.0',
port: process.env.PORT || 1111
},
module: {
loaders: [
// Linter configuration
{
test: /\.js$/,
loader: "eslint-loader",
exclude: /node_modules/,
query: {
rules: {
"quotes": ["off", "double"]
}
}
},
// Babel with tree-shaking configuration
{
test: dir_src,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015', 'stage-0'],
// All of the plugins of babel-preset-es2015,
// minus babel-plugin-transform-es2015-modules-commonjs
plugins: [
'transform-class-properties',
'transform-es2015-template-literals',
'transform-es2015-literals',
'transform-es2015-function-name',
'transform-es2015-arrow-functions',
'transform-es2015-block-scoped-functions',
'transform-es2015-classes',
'transform-es2015-object-super',
'transform-es2015-shorthand-properties',
'transform-es2015-computed-properties',
'transform-es2015-for-of',
'transform-es2015-sticky-regex',
'transform-es2015-unicode-regex',
'check-es2015-constants',
'transform-es2015-spread',
'transform-es2015-parameters',
'transform-es2015-destructuring',
'transform-es2015-block-scoping',
'transform-es2015-typeof-symbol',
['transform-regenerator', { async: false, asyncGenerators: false }],
],
},
}
]
},
// NOTE: empty extension doesn't work in 2.1.0-beta.21
resolve: {
extensions: ['*', '.js', '.jsx'],
modules: [
dir_src,
dir_modules
]
},
plugins: [
// Copy plugin
// new CopyWebpackPlugin([{
// from: path.resolve(dir_build, 'index.js'),
// to: path.resolve(dir_static, 'index.js')
// }]),
// Define plugin; Allows you to define variables that can be used in your
// javascript files
new webpack.DefinePlugin({
__STRING__: `"${env}"`,
__DEV__: (env == 'dev')
}),
// Loader options
new webpack.LoaderOptionsPlugin({
minimize: true,
debug: false
}),
// Module occurence order optimization
//new webpack.optimize.OccurenceOrderPlugin(true),
// Minification optimization
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
output: {
comments: false
},
sourceMap: false
}),
// Chunking
// new webpack.optimize.CommonsChunkPlugin({
// name: 'vendor',
// minChunks: Infinity,
// filename: 'vendor.bundle.js'
// }),
// Avoid publishing files when compilation fails
new webpack.NoErrorsPlugin(),
// Progress bar
new ProgressBarPlugin({
format: chalk.bold(' build ') + '[:bar] ' + chalk.green(':percent') + ' (:elapseds) - :msg ',
width: 40,
clear: false
})
],
// Nice colored output
stats: { colors: true }
}