-
Notifications
You must be signed in to change notification settings - Fork 66
Expand file tree
/
Copy pathwebpack.config.js
More file actions
106 lines (100 loc) · 4.69 KB
/
webpack.config.js
File metadata and controls
106 lines (100 loc) · 4.69 KB
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
// webpack.config.js (wp-scripts based, no Encore)
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const defaultConfig = require('@wordpress/scripts/config/webpack.config');
const WooCommerceDependencyExtractionWebpackPlugin = require('@woocommerce/dependency-extraction-webpack-plugin');
module.exports = (env = {}, argv = {}) => {
const mode = argv.mode || process.env.NODE_ENV || 'development';
const isProd = mode === 'production';
const basePath = process.env.BASE_PATH || '.';
// Common toggles to avoid extra runtime/vendor chunks (closer to Encore behavior)
const noChunking = {
optimization: {
...defaultConfig.optimization,
runtimeChunk: false,
splitChunks: { cacheGroups: { default: false, defaultVendors: false } },
},
};
// Replace default DependencyExtractionWebpackPlugin with WooCommerce-aware version
const jsPlugins = [
...defaultConfig.plugins.filter(
(plugin) => plugin.constructor.name !== 'DependencyExtractionWebpackPlugin'
),
new WooCommerceDependencyExtractionWebpackPlugin(),
];
// --- JS bundle config ---
const jsConfig = {
...defaultConfig,
name: 'javascript-configuration',
plugins: jsPlugins,
entry: {
'applepay.min': './resources/js/src/features/apple-pay/applepay.js',
'applepayDirect.min': './resources/js/src/features/apple-pay/applepayDirect.js',
'applepayDirectCart.min': './resources/js/src/features/apple-pay/applepayDirectCart.js',
'paypalButton.min': './resources/js/src/features/paypal/paypalButton.js',
'paypalButtonCart.min': './resources/js/src/features/paypal/paypalButtonCart.js',
'settings.min': './resources/js/src/admin/settings/settings.js',
'gatewaySettings.min': './resources/js/src/admin/settings/gatewaySettings.js',
'advancedSettings.min': './resources/js/src/admin/settings/advancedSettings.js',
'gatewaySurcharge.min': './resources/js/src/features/surcharge/gatewaySurcharge.js',
'mollie-components.min': './resources/js/src/checkout/legacy/components/mollie-components.js',
'mollieBlockIndex.min': './resources/js/src/checkout/blocks/index.js',
'rivertyCountryPlaceholder.min':
'./resources/js/src/features/regional/rivertyCountryPlaceholder.js',
'mollie-settings-2024.min':
'./resources/js/src/admin/settings/mollie-settings-2024.js',
},
output: {
...defaultConfig.output,
path: path.resolve(basePath, 'public/js'),
filename: '[name].js',
publicPath: '/public/js/',
clean: true,
},
devtool: isProd ? false : 'source-map',
...noChunking,
};
// --- CSS/SCSS bundle config ---
// Uses CSS entries directly. @wordpress/scripts already includes
// RemoveEmptyScriptsPlugin so no stray JS files are emitted for pure-CSS entries.
const cssConfig = {
...defaultConfig,
name: 'css-configuration',
entry: {
'mollie-components.min': './resources/scss/mollie-components.scss',
'mollie-gateway-icons.min': './resources/scss/mollie-gateway-icons.scss',
'unabledButton.min': './resources/scss/unabledButton.scss',
'mollie-applepaydirect.min': './resources/scss/mollie-applepaydirect.scss',
'mollie-block-custom-field.min': './resources/scss/mollie-block-custom-field.scss',
'mollie-advanced-settings.min': './resources/scss/mollie-advanced-settings.scss',
},
output: {
...defaultConfig.output,
path: path.resolve(basePath, 'public/css'),
filename: '[name].noop.js', // will be removed by RemoveEmptyScriptsPlugin
publicPath: '/public/css/',
clean: true,
},
devtool: isProd ? false : 'source-map',
plugins: [
// Replace the default MiniCssExtractPlugin to control CSS output path/names
...defaultConfig.plugins.filter(
(p) => !(p instanceof MiniCssExtractPlugin)
),
new MiniCssExtractPlugin({
filename: '[name].css',
chunkFilename: '[name].css',
}),
],
module: {
...defaultConfig.module,
rules: [
...defaultConfig.module.rules,
// Sass loader is already configured by @wordpress/scripts.
// No extra rule needed unless you want custom includePaths.
],
},
...noChunking,
};
return [jsConfig, cssConfig];
};