-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathwebpack.config.babel.js
131 lines (106 loc) · 2.5 KB
/
webpack.config.babel.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
import webpack from 'webpack';
import path from 'path';
import minimist from 'minimist';
// parse cli arguments and set defaults
let argv = minimist(process.argv.slice(2),{
default: {
env: 'dev'
}
});
process.env.NODE_ENV = "development";
//override node enviroment if --prod flag was set to prod
if(argv.prod) process.env.NODE_ENV = "production";
let port = process.env.PORT || 9000;
if(argv.port) port = argv.port;
let plugins = [
new webpack.ResolverPlugin(
new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin("bower.json", ["main"])
),
new webpack.ProvidePlugin({
'fetch': 'imports?this=>global!exports?global.fetch!whatwg-fetch'
})
];
if(argv.prod){
plugins = plugins.concat([
new webpack.optimize.UglifyJsPlugin({minimize: true}),
])
}else{
plugins = plugins.concat([
new webpack.HotModuleReplacementPlugin(),
]);
}
let preloaders = [
];
if(argv.lint){
preloaders = preloaders.concat([
{test: /\.jsx?$/, loader: 'eslint', exclude: /build|lib|bower_components|node_modules|bundle.js/},
]);
}else{
plugins.push(new webpack.NoErrorsPlugin());
}
let output = {};
let entry = {};
let newEntry = {};
newEntry[argv.demo] = `./demos/${argv.demo}/index.jsx`;
entry = newEntry;
if(!argv.prod){
//create files at the root during dev
output = {
filename: 'bundle.js',
publicPath: '/',
path: __dirname + '/'
};
}else {
//build bundled files into the demo dir
output = {
filename: '[name]/bundle.js',
publicPath: '/demos/',
path: __dirname + '/demos/'
};
}
if(!argv.prod) {
//add hot module reloading client as an entry during dev
entry = Object.keys(entry).reduce(function(result, key) {
result[key] = ['webpack-hot-middleware/client',entry[key]];
return result;
}, {});
}
//eslint settings
let eslint = {
configFile: '.eslintrc',
//formatter: require("eslint/lib/formatters/stylish"),
failOnWarning: false,
failOnError: false
};
if(argv.prod) {
plugins = plugins.concat([
new webpack.optimize.OccurenceOrderPlugin()
]);
eslint.failOnWarning = true;
eslint.failOnError = true;
}
module.exports = {
devtool: 'source-map',
entry: entry,
port: port,
output: output,
resolve: {
extensions: ['','.js', '.jsx', '.json']
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /bower_components|node_modules|bundle.js/,
loader: 'babel'
}
],
preLoaders: preloaders,
},
node: {
fs: 'empty'
},
//postcss: postcss,
plugins: plugins,
eslint: eslint
};