Skip to content

Commit e344ec1

Browse files
committed
webpack base file added, common config moved out to a base config file
1 parent dccbb87 commit e344ec1

File tree

5 files changed

+74
-114
lines changed

5 files changed

+74
-114
lines changed

config/webpack.base.config.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
2+
const HtmlWebpackPlugin = require('html-webpack-plugin');
3+
const paths = require('./paths');
4+
5+
module.exports = function({ plugins }) {
6+
return ({
7+
entry: {
8+
index: paths.entry
9+
},
10+
output: {
11+
path: paths.output,
12+
filename: '[name].bundle.js'
13+
},
14+
module: {
15+
rules: [
16+
{
17+
test: /(.js|.jsx)/,
18+
exclude: /(node_modules|bower_components)/,
19+
use: 'babel-loader',
20+
},
21+
{
22+
test: /\.s[ac]ss$/i,
23+
use: [
24+
'style-loader',
25+
'css-loader',
26+
'sass-loader',
27+
],
28+
},
29+
{
30+
test: /\.css$/i,
31+
use: ['style-loader', 'css-loader'],
32+
},
33+
{
34+
test: /\.(png|jpe?g|gif)$/i,
35+
use: [
36+
{
37+
loader: 'file-loader',
38+
},
39+
],
40+
},
41+
]
42+
},
43+
plugins: [
44+
...plugins,
45+
new HtmlWebpackPlugin({
46+
template: paths.template,
47+
hash: true,
48+
title: 'Boilerplate',
49+
}),
50+
new MiniCssExtractPlugin({
51+
filename: '[name].[hash].css',
52+
chunkFilename: '[id].[hash].css'
53+
}),
54+
],
55+
resolve: {
56+
extensions: ['.js', 'jsx', '.scss', '.css']
57+
},
58+
});
59+
}

config/webpack.dev.config.js

Lines changed: 3 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,13 @@
1-
const HtmlWebpackPlugin = require('html-webpack-plugin');
2-
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
1+
const webpackBaseConfig = require('./webpack.base.config');
32
const paths = require('./paths');
43

54
module.exports = {
65
mode: 'development',
7-
entry: {
8-
index: paths.entry
9-
},
106
devtool: 'eval-source-map',
11-
output: {
12-
path: paths.output,
13-
filename: '[name].bundle.js',
14-
pathinfo: false,
15-
},
16-
module: {
17-
rules: [
18-
{
19-
test: /(.js|.jsx)/,
20-
exclude: /(node_modules|bower_components)/,
21-
use: 'babel-loader',
22-
},
23-
{
24-
test: /\.s[ac]ss$/i,
25-
use: [
26-
'style-loader',
27-
'css-loader',
28-
'sass-loader',
29-
],
30-
},
31-
{
32-
test: /\.css$/i,
33-
use: ['style-loader', 'css-loader'],
34-
},
35-
{
36-
test: /\.(png|jpe?g|gif)$/i,
37-
use: [
38-
{
39-
loader: 'file-loader',
40-
},
41-
],
42-
},
43-
]
44-
},
45-
plugins: [
46-
new HtmlWebpackPlugin({
47-
template: paths.template,
48-
hash: true,
49-
title: 'Boilerplate',
50-
}),
51-
new MiniCssExtractPlugin({
52-
filename: '[name].css',
53-
chunkFilename: '[id].css'
54-
})
55-
],
56-
resolve: {
57-
extensions: ['.js', 'jsx', '.scss', '.css']
58-
},
7+
...webpackBaseConfig({ plugins: [] }),
598
devServer: {
609
contentBase: paths.output,
6110
port: 9000,
6211
hot: true,
6312
}
64-
}
13+
};

config/webpack.prod.config.js

Lines changed: 10 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,17 @@
11
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
22
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
3-
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
4-
const HtmlWebpackPlugin = require('html-webpack-plugin');
5-
const paths = require('./paths');
3+
const webpackBaseConfig = require('./webpack.base.config');
64

75
module.exports = {
86
mode: 'production',
9-
entry: {
10-
index: paths.entry
11-
},
127
devtool: 'cheap-source-map',
13-
output: {
14-
path: paths.output,
15-
filename: '[name].bundle.js'
16-
},
17-
module: {
18-
rules: [
19-
{
20-
test: /(.js|.jsx)/,
21-
exclude: /(node_modules|bower_components)/,
22-
use: 'babel-loader',
23-
},
24-
{
25-
test: /\.s[ac]ss$/i,
26-
use: [
27-
'style-loader',
28-
'css-loader',
29-
'sass-loader',
30-
],
31-
},
32-
{
33-
test: /\.css$/i,
34-
use: ['style-loader', 'css-loader'],
35-
},
36-
{
37-
test: /\.(png|jpe?g|gif)$/i,
38-
use: [
39-
{
40-
loader: 'file-loader',
41-
},
42-
],
43-
},
8+
...webpackBaseConfig({
9+
plugins: [
10+
new CleanWebpackPlugin(),
11+
new BundleAnalyzerPlugin({
12+
analyzerMode: 'static',
13+
defaultSizes: 'gzip'
14+
}),
4415
]
45-
},
46-
plugins: [
47-
new CleanWebpackPlugin(),
48-
new HtmlWebpackPlugin({
49-
template: paths.template,
50-
hash: true,
51-
title: 'Boilerplate',
52-
}),
53-
new BundleAnalyzerPlugin({
54-
analyzerMode: 'static',
55-
defaultSizes: 'gzip'
56-
}),
57-
new MiniCssExtractPlugin({
58-
filename: '[name].[hash].css',
59-
chunkFilename: '[id].[hash].css'
60-
})
61-
],
62-
resolve: {
63-
extensions: ['.js', 'jsx', '.scss', '.css']
64-
},
65-
}
16+
}),
17+
};

src/__tests__/__snapshots__/app.spec.js.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ exports[`should take a snapshot 1`] = `
88
<p
99
class="App--Title"
1010
>
11-
Welcome To React Boilerplate
11+
Welcome To React Boilerplate!
1212
</p>
1313
<img
1414
alt="React Logo"

src/app.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import './app.scss';
55
export default function App() {
66
return (
77
<div className="App--Container">
8-
<p className="App--Title">Welcome To React Boilerplate</p>
8+
<p className="App--Title">Welcome To React Boilerplate!</p>
99
<img src={logo} alt="React Logo" className="App--Image" />
1010
</div>
1111
);

0 commit comments

Comments
 (0)