-
Notifications
You must be signed in to change notification settings - Fork 37
/
webpack.js
63 lines (59 loc) · 1.3 KB
/
webpack.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
const { join } = require('path');
const ExtractText = require('extract-text-webpack-plugin');
const babelOpts = require('./babel');
const styles = require('./styles');
const setup = require('./setup');
const dist = join(__dirname, '..', 'dist');
const exclude = /(node_modules|bower_components)/;
module.exports = env => {
const isProd = env && env.production;
if (isProd) {
babelOpts.presets.push('babili');
} else {
styles.unshift({ loader:'style-loader' });
}
return {
entry: {
app: './src/index.js',
vendor: [
// pull these to a `vendor.js` file
'preact'
]
},
output: {
path: dist,
filename: '[name].[hash].js',
publicPath: '/'
},
resolve: {
alias: {
// Run `npm install preact-compat --save`
// 'react': 'preact-compat',
// 'react-dom': 'preact-compat'
}
},
module: {
rules: [{
test: /\.jsx?$/,
exclude: exclude,
loader: {
loader: 'babel-loader',
options: babelOpts
}
}, {
test: /\.(sass|scss)$/,
use: isProd ? ExtractText.extract({ fallback:'style-loader', use:styles }) : styles
}]
},
plugins: setup(isProd),
devtool: !isProd && 'eval',
devServer: {
contentBase: dist,
port: process.env.PORT || 3000,
historyApiFallback: true,
compress: isProd,
inline: !isProd,
hot: !isProd
}
};
};