-
Notifications
You must be signed in to change notification settings - Fork 877
/
webpack.config.base.js
100 lines (97 loc) · 3.39 KB
/
webpack.config.base.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
// External dependencies
const DependencyExtractionWebpackPlugin = require( "@wordpress/dependency-extraction-webpack-plugin" );
const defaultConfig = require( "@wordpress/scripts/config/webpack.config" );
const MiniCssExtractPlugin = require( "mini-css-extract-plugin" );
const { BundleAnalyzerPlugin } = require( "webpack-bundle-analyzer" );
const { DefinePlugin } = require( "webpack" );
// Internal dependencies
const { yoastExternals } = require( "./externals" );
let analyzerPort = 8888;
module.exports = function( { entry, output, combinedOutputFile, cssExtractFileName } ) {
return {
...defaultConfig,
optimization: {
...defaultConfig.optimization,
usedExports: process.env.NODE_ENV === "production",
},
entry,
output: {
...defaultConfig.output,
...output,
},
plugins: [
...defaultConfig.plugins.filter(
( plugin ) =>
plugin.constructor.name !== "DependencyExtractionWebpackPlugin" &&
plugin.constructor.name !== "MiniCssExtractPlugin" &&
plugin.constructor.name !== "CleanWebpackPlugin" &&
plugin.constructor.name !== "BundleAnalyzerPlugin" &&
plugin.constructor.name !== "DefinePlugin",
),
new DependencyExtractionWebpackPlugin( {
injectPolyfill: true,
combineAssets: true,
combinedOutputFile,
/**
* Handles requests to externals.
*
* @param {string} request The requested package.
*
* @returns {string|null} The external.
*/
requestToExternal( request ) {
if ( yoastExternals[ request ] ) {
return [ "yoast", yoastExternals[ request ] ];
}
if ( request.startsWith( "lodash/" ) ) {
return [ "lodash", request.substring( 7 ) ];
}
if ( request.startsWith( "lodash-es/" ) ) {
return [ "lodash", request.substring( 10 ) ];
}
if ( request === "react-select" ) {
return [ "yoast", "reactSelect" ];
}
if ( request === "react-select/async" ) {
return [ "yoast", "reactSelectAsync" ];
}
if ( request.startsWith( "@yoast/externals/" ) ) {
return [ "yoast", "externals", request.substring( 17 ) ];
}
},
/**
* Handles requests to externals.
*
* @param {string} request The requested package.
*
* @returns {string|null} The external.
*/
requestToHandle( request ) {
if ( yoastExternals[ request ] ) {
const handle = yoastExternals[ request ].replace( /([A-Z])/g, "-$1" ).toLowerCase();
return "yoast-seo-" + handle + "-package";
}
if ( request.startsWith( "lodash/" ) || request.startsWith( "lodash-es/" ) ) {
return "lodash";
}
if ( request === "react-select" || request === "react-select/async" ) {
return "yoast-seo-react-select";
}
if ( request.startsWith( "@yoast/externals/" ) ) {
return "yoast-seo-externals-" + request.substring( 17 );
}
},
} ),
new MiniCssExtractPlugin( { filename: cssExtractFileName } ),
process.env.WP_BUNDLE_ANALYZER && new BundleAnalyzerPlugin( {
analyzerPort: analyzerPort++,
} ),
new DefinePlugin( {
// Inject the `process.env.NODE_DEBUG` global, used for development features flagging inside the `yoastseo` package.
"process.env.NODE_DEBUG": JSON.stringify( process.env.NODE_DEBUG ),
// Copied from WP config: Inject the `SCRIPT_DEBUG` global, used for development features flagging.
SCRIPT_DEBUG: process.env.NODE_ENV !== "production",
} ),
].filter( Boolean ),
};
};