This repository has been archived by the owner on Apr 25, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.parts.js
91 lines (79 loc) · 1.81 KB
/
webpack.parts.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
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const BabelWebpackPlugin = require('babel-minify-webpack-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const cssnano = require('cssnano');
exports.extractCSS = ({ include, exclude, use }) => {
// Output extracted CSS to a file
const plugin = new ExtractTextPlugin({
filename: 'style.css',
});
return {
module: {
rules: [
{
test: /\.css$/,
include,
exclude,
use: plugin.extract({
use,
fallback: 'style-loader',
}),
},
],
},
plugins: [plugin],
};
};
exports.autoprefix = () => ({
loader: 'postcss-loader',
options: {
plugins: () => [require('autoprefixer')()],
},
});
exports.loadJavaScript = ({ include, exclude }) => ({
module: {
rules: [
{
test: /\.js$/,
include,
exclude,
loader: 'babel-loader',
options: {
// Enable caching for improved performance during
// development.
// It uses default OS directory by default. If you need
// something more custom, pass a path to it.
// I.e., { cacheDirectory: '<path>' }
cacheDirectory: true,
},
},
],
},
});
exports.clean = path => ({
plugins: [new CleanWebpackPlugin([path])],
});
exports.minifyJavaScript = () => ({
plugins: [new BabelWebpackPlugin()],
});
exports.minifyCSS = ({ options }) => ({
plugins: [
new OptimizeCSSAssetsPlugin({
cssProcessor: cssnano,
cssProcessorOptions: options,
canPrint: false,
}),
],
});
exports.setFreeVariable = (key, value) => {
const env = {};
env[key] = JSON.stringify(value);
return {
plugins: [new webpack.DefinePlugin(env)],
};
};
exports.page = ({ path = '', entry } = {}) => ({
entry,
});