Skip to content

Commit 68dc380

Browse files
kaizencodesjustin808
authored andcommitted
use webpack-merge (#838)
- fix hot config bundle name
1 parent 0a9c9ae commit 68dc380

File tree

3 files changed

+186
-176
lines changed

3 files changed

+186
-176
lines changed

spec/dummy/client/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
"style-loader": "^0.16.1",
4747
"url-loader": "^0.5.8",
4848
"webpack": "^2.3.3",
49-
"webpack-manifest-plugin": "^1.1.0"
49+
"webpack-manifest-plugin": "^1.1.0",
50+
"webpack-merge": "^4.1.0"
5051
},
5152
"devDependencies": {
5253
"babel-plugin-react-transform": "^2.0.2",

spec/dummy/client/webpack.client.rails.build.config.js

+92-88
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
/* eslint-disable comma-dangle */
66

77
const ExtractTextPlugin = require('extract-text-webpack-plugin');
8+
const merge = require('webpack-merge');
89
const config = require('./webpack.client.base.config');
910
const { resolve } = require('path');
1011
const webpackConfigLoader = require('react-on-rails/webpackConfigLoader');
@@ -13,101 +14,104 @@ const { paths, publicPath } = webpackConfigLoader(configPath);
1314

1415
const devBuild = process.env.NODE_ENV !== 'production';
1516

16-
config.output = {
17-
filename: '[name].js',
18-
path: resolve('..', paths.output, paths.assets),
19-
publicPath,
20-
},
17+
if (devBuild) {
18+
console.log('Webpack dev build for Rails'); // eslint-disable-line no-console
19+
config.devtool = 'eval-source-map';
20+
} else {
21+
console.log('Webpack production build for Rails'); // eslint-disable-line no-console
22+
}
2123

22-
// See webpack.client.base.config for adding modules common to both the webpack dev server and rails
24+
module.exports = merge(config, {
2325

24-
config.module.rules.push(
25-
{
26-
test: /\.jsx?$/,
27-
use: 'babel-loader',
28-
exclude: /node_modules/,
26+
output: {
27+
filename: '[name].js',
28+
path: resolve('..', paths.output, paths.assets),
29+
publicPath,
2930
},
30-
{
31-
test: /\.css$/,
32-
loader: ExtractTextPlugin.extract({
33-
fallback: 'style-loader',
34-
use: [
35-
{
36-
loader: 'css-loader',
37-
options: {
38-
minimize: true,
39-
modules: true,
40-
importLoaders: 1,
41-
localIdentName: '[name]__[local]__[hash:base64:5]',
42-
},
43-
},
44-
'postcss-loader',
45-
],
46-
}),
47-
},
48-
{
49-
test: /\.scss$/,
50-
use: ExtractTextPlugin.extract({
51-
fallback: 'style-loader',
52-
loader: [
53-
{
54-
loader: 'css-loader',
55-
options: {
56-
minimize: true,
57-
modules: true,
58-
importLoaders: 3,
59-
localIdentName: '[name]__[local]__[hash:base64:5]',
60-
},
61-
},
62-
{
63-
loader: 'postcss-loader',
31+
32+
// See webpack.client.base.config for adding modules common to both the webpack dev server and rails
33+
34+
module: {
35+
rules: [
36+
{
37+
test: /\.jsx?$/,
38+
use: 'babel-loader',
39+
exclude: /node_modules/,
40+
},
41+
{
42+
test: /\.css$/,
43+
loader: ExtractTextPlugin.extract({
44+
fallback: 'style-loader',
45+
use: [
46+
{
47+
loader: 'css-loader',
48+
options: {
49+
minimize: true,
50+
modules: true,
51+
importLoaders: 1,
52+
localIdentName: '[name]__[local]__[hash:base64:5]',
53+
},
54+
},
55+
'postcss-loader',
56+
],
57+
}),
58+
},
59+
{
60+
test: /\.scss$/,
61+
use: ExtractTextPlugin.extract({
62+
fallback: 'style-loader',
63+
loader: [
64+
{
65+
loader: 'css-loader',
66+
options: {
67+
minimize: true,
68+
modules: true,
69+
importLoaders: 3,
70+
localIdentName: '[name]__[local]__[hash:base64:5]',
71+
},
72+
},
73+
{
74+
loader: 'postcss-loader',
75+
options: {
76+
plugins: 'autoprefixer'
77+
}
78+
},
79+
'sass-loader',
80+
{
81+
loader: 'sass-resources-loader',
82+
options: {
83+
resources: './app/assets/styles/app-variables.scss'
84+
},
85+
}
86+
],
87+
}),
88+
},
89+
{
90+
test: require.resolve('react'),
91+
use: {
92+
loader: 'imports-loader',
6493
options: {
65-
plugins: 'autoprefixer'
94+
shim: 'es5-shim/es5-shim',
95+
sham: 'es5-shim/es5-sham',
6696
}
67-
},
68-
'sass-loader',
69-
{
70-
loader: 'sass-resources-loader',
97+
}
98+
},
99+
{
100+
test: require.resolve('jquery-ujs'),
101+
use: {
102+
loader: 'imports-loader',
71103
options: {
72-
resources: './app/assets/styles/app-variables.scss'
73-
},
104+
jQuery: 'jquery',
105+
}
74106
}
75-
],
76-
}),
77-
},
78-
{
79-
test: require.resolve('react'),
80-
use: {
81-
loader: 'imports-loader',
82-
options: {
83-
shim: 'es5-shim/es5-shim',
84-
sham: 'es5-shim/es5-sham',
85107
}
86-
}
108+
],
87109
},
88-
{
89-
test: require.resolve('jquery-ujs'),
90-
use: {
91-
loader: 'imports-loader',
92-
options: {
93-
jQuery: 'jquery',
94-
}
95-
}
96-
}
97-
);
98110

99-
config.plugins.push(
100-
new ExtractTextPlugin({
101-
filename: '[name].css',
102-
allChunks: true
103-
})
104-
);
105-
106-
if (devBuild) {
107-
console.log('Webpack dev build for Rails'); // eslint-disable-line no-console
108-
config.devtool = 'eval-source-map';
109-
} else {
110-
console.log('Webpack production build for Rails'); // eslint-disable-line no-console
111-
}
112-
113-
module.exports = config;
111+
plugins: [
112+
new ExtractTextPlugin({
113+
filename: '[name].css',
114+
allChunks: true
115+
}),
116+
],
117+
});

0 commit comments

Comments
 (0)