-
Notifications
You must be signed in to change notification settings - Fork 2
/
webpack.test.config.js
102 lines (93 loc) · 2.98 KB
/
webpack.test.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
var path = require('path');
var webpack = require('webpack');
var fs = require('fs');
var ROOT_PATH = path.resolve(__dirname);
//setup asssets path
var assetsPath = path.resolve(__dirname,'./public/dist');
var host = (process.env.HOST|| 'localhost');
var port = (+process.env.PORT +1) || 3001;
//load babelrc for server side setup
var babelrc = fs.readFileSync('./.babelrc');
var babelrcObject = {};
//load babelrc to object to change plugin base on setting
try {
babelrcObject = JSON.parse(babelrc);
}
catch(err){
console.error('Error in parsing .babelrc');
console.error(err);
}
//load babelrc development env setting;
var babelrcObjectDevelopment = babelrcObject.env && babelrcObject.env.development || {};
// merge global and dev-only plugins
var combinedPlugins = babelrcObject.plugins || [];
combinedPlugins = combinedPlugins.concat(babelrcObjectDevelopment.plugins);
var babelLoaderQuery = Object.assign({}, babelrcObjectDevelopment, babelrcObject, {plugins: combinedPlugins});
delete babelLoaderQuery.env;
// Since we use .babelrc for client and server, and we don't want HMR enabled on the server, we have to add
// the babel plugin react-transform-hmr manually here.
// make sure react-transform is enabled
babelLoaderQuery.plugins = babelLoaderQuery.plugins || [];
var reactTransform = null;
for (var i = 0; i < babelLoaderQuery.plugins.length; ++i) {
var plugin = babelLoaderQuery.plugins[i];
if (Array.isArray(plugin) && plugin[0] === 'react-transform') {
reactTransform = plugin;
}
}
if (!reactTransform) {
reactTransform = ['react-transform', {transforms: []}];
babelLoaderQuery.plugins.push(reactTransform);
}
if (!reactTransform[1] || !reactTransform[1].transforms) {
reactTransform[1] = Object.assign({}, reactTransform[1], {transforms: []});
}
// make sure react-transform-hmr is enabled
reactTransform[1].transforms.push({
transform: 'react-transform-hmr',
imports: ['react'],
locals: ['module']
});
console.log(host,port);
const webpackConfiguration = {
devtool: 'inline-source-map',
entry: [
'webpack-hot-middleware/client?path=http://' + host + ':' + port + '/__webpack_hmr',
'./shared'
],
output: {
path: assetsPath,
filename: 'bundle.js',
publicPath: 'http://' + host + ':' + port + '/dist/'
},
resolve: {
modulesDirectories: ['shared'],
extensions: ['', '.js', '.jsx']
},
module: {
loaders: [{
test: /\.jsx?$/,
exclude: /node_modules/,
loaders: ['babel?' + JSON.stringify(babelLoaderQuery), 'eslint-loader']
},
{
test: /\.css$/,
loaders: ['style', 'css', 'postcss']
},
{
test: /\.scss$/,
loaders: ['style', 'css', 'postcss', 'sass']
}]
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.IgnorePlugin(/webpack-stats\.json$/),
new webpack.DefinePlugin({
__CLIENT__: true,
__SERVER__: false,
__DEVELOPMENT__: true,
__DEVTOOLS__: true // <-------- DISABLE redux-devtools HERE
})
]
};
module.exports= webpackConfiguration;