-
Notifications
You must be signed in to change notification settings - Fork 2
/
webpack.config.js
140 lines (134 loc) · 2.9 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
const CopyWebpackPlugin = require('copy-webpack-plugin');
const FaviconsWebpackPlugin = require('favicons-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
const webpack = require('webpack');
const host = process.env.HOST || '0.0.0.0';
const port = process.env.PORT || 3000;
const env = process.env.NODE_ENV === 'production' ? 'production' : 'development';
const config = {
development: {
baseHref: '/',
outputPath: 'tmp'
},
production: {
baseHref: '/',
outputPath: 'build'
}
};
const { baseHref, outputPath } = config[env];
const app = env === 'production' ? [
'./App.jsx'
] : [
`webpack-dev-server/client?http://${host}:${port}`,
'./App.jsx'
];
const plugins = [
new FaviconsWebpackPlugin({
logo: path.join(__dirname, 'src/favicon.png'),
prefix: 'images/favicons/'
}),
new HtmlWebpackPlugin({
title: 'TempLists | To-Do Templates',
template: 'index.hbs'
}),
new webpack.DefinePlugin({
CONFIG: JSON.stringify({
baseHref
})
}),
new CopyWebpackPlugin([
{ from: 'images', to: 'images' }
])
];
if (env === 'production') {
plugins.push(
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('production')
}
})
);
plugins.push(
new webpack.optimize.UglifyJsPlugin()
);
} else {
plugins.push(
new webpack.HotModuleReplacementPlugin()
);
}
module.exports = {
// this is the path to your source files
context: path.join(__dirname, 'src'),
// this is the first file to be executed
entry: {
app
},
// local dev server configurations
devServer: {
host,
port,
contentBase: `./${outputPath}`,
disableHostCheck: true,
publicPath: baseHref,
hot: true,
historyApiFallback: {
index: 'index.html'
},
stats: {
colors: true
}
},
// two plugins we're using. one copies images, html & css
// from the src directory to the build folder
plugins,
module: {
// this loader uses babel to transpile our JS code
loaders: [
{
test: /\.(js|jsx|es6)$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: [
'es2015',
'react',
'stage-0'
]
}
},
{
test: /\.hbs$/,
loader: 'handlebars-loader'
},
{
test: /\.sass$/,
loader: 'style-loader'
},
{
test: /\.sass$/,
loader: 'css-loader',
query: {
modules: true,
localIdentName: '[name]__[local]__[hash:base64:5]',
url: false
}
},
{
test: /\.sass$/,
loader: 'sass-loader'
}
]
},
// the JS file that's compiled from the JSX files
output: {
filename: 'index.js',
path: path.join(__dirname, outputPath)
},
resolve: {
extensions: [
'.js',
'.jsx'
]
}
};