-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.js
124 lines (120 loc) · 2.92 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
/* eslint global-require: 0 */
const webpack = require('webpack');
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin');
const NODE_ENV = process.env.NODE_ENV || 'development';
const config = {
devtool: process.env.NODE_ENV === 'production' ? null : 'source-map',
entry: {
jsx: './index.js',
},
output: {
path: path.join(__dirname, './dist'),
filename: 'bundle.js',
sourcePrefix: '',
publicPath: '/',
},
module: {
loaders: [
{
test: /\.html$/,
loader: 'html-loader',
},
{
test: /\.css$/,
loader: ExtractTextPlugin.extract('style', ['css-loader?minimize', 'autoprefixer']),
},
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract('style', [
'css-loader?minimize',
'autoprefixer',
'sass',
]),
},
{
test: /\.js$/,
exclude: /node_modules/,
loaders: [
'babel-loader',
],
},
{
test: /\.json$/,
loader: 'json-loader',
},
{
test: /\.(png|gif|jpg|jpeg|mp3|otf|woff|woff2|obj|ogg)$/,
loader: 'file-loader',
},
{
test: /.*\.svg$/,
loaders: [
'string-loader',
`svgo-loader?${JSON.stringify({
plugins: [
{ removeTitle: true },
{ convertColors: { shorthex: false } },
{ convertPathData: false },
],
})}`,
],
},
{
test: /\.md$/,
loaders: [
'file-loader',
`markdown-loader?${JSON.stringify({
smartypants: true,
})}`,
],
},
],
},
plugins: [
new CleanWebpackPlugin(['dist'], {
verbose: true,
dry: false,
}),
new CopyWebpackPlugin([
{ from: 'public', to: '../dist/public' },
]),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify(NODE_ENV),
},
}),
new HtmlWebpackPlugin({
inject: true,
cache: false,
template: 'index.html',
title: 'Foresight',
}),
new webpack.ExtendedAPIPlugin(),
new ScriptExtHtmlWebpackPlugin({
defaultAttribute: 'async',
}),
new ExtractTextPlugin('style.css'),
],
devServer: {
contentBase: './src',
host: '0.0.0.0',
port: 3000,
disableHostCheck: true,
},
context: path.resolve(__dirname, 'src'),
};
if (process.env.NODE_ENV === 'production' && process.env.RG_ENV !== 'dev') {
config.plugins = config.plugins.concat(
new webpack.optimize.UglifyJsPlugin({
output: {
comments: false,
},
})
);
}
module.exports = config;