-
Notifications
You must be signed in to change notification settings - Fork 1
/
webpack.config.dev.js
113 lines (99 loc) · 2.98 KB
/
webpack.config.dev.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
import config from 'config';
import webpack from 'webpack';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import BrowserSyncPlugin from 'browser-sync-webpack-plugin';
import DashboardPlugin from 'webpack-dashboard/plugin';
import precss from 'precss';
import postcssCssnext from 'postcss-cssnext';
import webpackConfig, { JS_SOURCE } from './webpack.config.common';
const PUBLIC_PATH = config.get('publicPath');
const APP_ENTRY_POINT = `${JS_SOURCE}/router`;
const webpackDevOutput = {
publicPath: `http://${PUBLIC_PATH}/`,
filename: 'assets/bundle.js',
};
// Merges webpackDevOutput and webpackConfig.output
webpackConfig.output = Object.assign(webpackConfig.output, webpackDevOutput);
webpackConfig.devServer = {
clientLogLevel: "error",
compress: true,
noInfo: true,
quiet: true,
stats: "errors-only",
};
// This is your testing container, we did
// that for you, so you don't need to, if
// you need to change the container template
// go to the file in `template` below
const html = config.get('html');
const htmlPlugins = html.map((page) =>
new HtmlWebpackPlugin({
title: page.title,
template: `src/assets/template/${page.template}`,
inject: 'body',
filename: page.filename,
})
);
webpackConfig.plugins.push(
new DashboardPlugin({ port: 3300 }),
new webpack.LoaderOptionsPlugin({
debug: true
}),
// Since we specify --hot mode, we don’t need to add this plugin
// It is mutually exclusive with the --hot option.
// new webpack.HotModuleReplacementPlugin(),
new webpack.DefinePlugin({
__CONFIG__: JSON.stringify(config.get('app')),
'process.env': {
NODE_ENV: JSON.stringify('development'),
},
}),
new BrowserSyncPlugin({
host: 'localhost',
port: 3001,
proxy: `http://localhost:${process.env.PORT}/`,
// Prevents BrowserSync from automatically opening up the app in your browser
open: false,
reloadDelay: 2500,
}, {
// Disable BrowserSync's browser reload/asset injections feature because
// Webpack Dev Server handles this for us already
reload: false,
})
);
webpackConfig.module.rules = webpackConfig.module.rules.concat({
test: /\.css$/,
use: [
{
loader: 'style-loader',
},
{
loader: 'css-loader',
options: { sourceMap: true, importLoaders: 1 }
},
{
loader: 'postcss-loader',
options: {
sourceMap: true,
// https://github.com/postcss/postcss-loader/issues/92
// https://github.com/postcss/postcss-loader/issues/8
plugins: () => [
precss(),
postcssCssnext({
browsers: ['last 2 versions', 'ie >= 9'],
compress: true,
}),
],
},
},
],
});
webpackConfig.plugins = webpackConfig.plugins.concat(htmlPlugins);
webpackConfig.devtool = 'cheap-module-eval-source-map';
webpackConfig.entry = [
'babel-polyfill',
`webpack-dev-server/client?http://${PUBLIC_PATH}`,
'webpack/hot/only-dev-server',
`./${APP_ENTRY_POINT}`,
];
export default webpackConfig;