Skip to content

Commit b38e6f7

Browse files
committed
Add woocommerce/dependency-extraction-webpack-plugin + cleaned up version
of webpack config. Thanks @haszari
1 parent 5f44614 commit b38e6f7

3 files changed

Lines changed: 80 additions & 82 deletions

File tree

package-lock.json

Lines changed: 44 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"lodash": "^4.17.15"
2424
},
2525
"devDependencies": {
26+
"@woocommerce/dependency-extraction-webpack-plugin": "^1.6.0",
2627
"@woocommerce/eslint-plugin": "^1.2.0",
2728
"@wordpress/eslint-plugin": "^9.0.2",
2829
"@wordpress/scripts": "^16.1.4",

webpack.config.js

Lines changed: 35 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,53 @@
1-
// Load the default @wordpress/scripts config object
21
const defaultConfig = require( '@wordpress/scripts/config/webpack.config' );
3-
const DependencyExtractionWebpackPlugin = require( '@wordpress/dependency-extraction-webpack-plugin' );
4-
const path = require( 'path' );
2+
const WooCommerceDependencyExtractionWebpackPlugin = require( '@woocommerce/dependency-extraction-webpack-plugin' );
53

64
const requestToExternal = ( request ) => {
7-
// The following default externals are bundled for compatibility with older versions of WP
8-
// Note CSS for specific components is bundled via admin/assets/src/index.scss
9-
// WP 5.4 is the min version for <Card* />, <TabPanel />
10-
const bundled = [
11-
'@wordpress/compose',
12-
'@wordpress/components',
13-
'@wordpress/primitives',
14-
];
5+
// Bundle these packages & components so we can use the latest, independent of WordPress version.
6+
// Without bundling these specific recent versions, components like LandingPageApp don't render correctly.
7+
const bundled = [ '@wordpress/components' ];
158
if ( bundled.includes( request ) ) {
169
return false;
1710
}
18-
19-
const wcDepMap = {
20-
'@woocommerce/navigation': [ 'wc', 'navigation' ],
21-
};
22-
23-
return wcDepMap[ request ];
2411
};
2512

26-
const requestToHandle = ( request ) => {
27-
const wcHandleMap = {
28-
'@woocommerce/components': 'wc-components',
29-
'@woocommerce/navigation': 'wc-navigation',
30-
};
31-
32-
return wcHandleMap[ request ];
33-
};
13+
// Replace the default DependencyExtractionWebpackPlugin with the Woo version
14+
// and override to bundle specific newer packages (see requestToExternal above).
15+
const ourPlugins = [
16+
...defaultConfig.plugins.filter(
17+
( plugin ) =>
18+
plugin.constructor.name !== 'DependencyExtractionWebpackPlugin'
19+
),
20+
new WooCommerceDependencyExtractionWebpackPlugin( {
21+
injectPolyfill: true, // TBD Confirm this is needed for Pinterest.
22+
requestToExternal,
23+
} ),
24+
];
3425

35-
// Use the defaultConfig but replace the entry and output properties
26+
// Webpack config for main admin app - onboarding and settings.
3627
const SetupGuide = {
37-
...defaultConfig,
38-
resolve: {
39-
...defaultConfig.resolve,
40-
alias: {
41-
'.~': path.resolve( process.cwd(), 'assets/source/' ),
42-
},
43-
// Resolve jsx/tsx files for `@woocommerce/data`...`/with-plugins-hydration`
44-
extensions: [ '.js', '.jsx', '.json' ],
28+
...defaultConfig,
29+
plugins: ourPlugins,
30+
entry: {
31+
index: './assets/source/setup-guide/index.js',
4532
},
46-
plugins: [
47-
...defaultConfig.plugins.filter(
48-
( plugin ) =>
49-
plugin.constructor.name !== 'DependencyExtractionWebpackPlugin'
50-
),
51-
new DependencyExtractionWebpackPlugin( {
52-
injectPolyfill: true,
53-
requestToExternal,
54-
requestToHandle,
55-
} ),
56-
],
57-
entry: {
58-
index: './assets/source/setup-guide/index.js',
59-
},
60-
output: {
33+
output: {
6134
...defaultConfig.output,
62-
filename: '[name].js',
63-
path: __dirname + '/assets/setup-guide',
64-
},
35+
filename: '[name].js',
36+
path: __dirname + '/assets/setup-guide',
37+
},
6538
};
6639

40+
// Webpack config for script to add our setup task.
6741
const SetupTask = {
68-
...defaultConfig,
69-
resolve: {
70-
...defaultConfig.resolve,
71-
alias: {
72-
'.~': path.resolve( process.cwd(), 'assets/source/' ),
73-
},
74-
// Resolve jsx/tsx files for `@woocommerce/data`...`/with-plugins-hydration`
75-
extensions: [ '.ts', '.tsx', '.js', '.jsx', '.json' ],
42+
...defaultConfig,
43+
plugins: ourPlugins,
44+
entry: {
45+
index: './assets/source/setup-task/index.js',
46+
},
47+
output: {
48+
filename: '[name].js',
49+
path: __dirname + '/assets/setup-task',
7650
},
77-
plugins: [
78-
...defaultConfig.plugins.filter(
79-
( plugin ) =>
80-
plugin.constructor.name !== 'DependencyExtractionWebpackPlugin'
81-
),
82-
new DependencyExtractionWebpackPlugin( {
83-
injectPolyfill: true,
84-
requestToExternal,
85-
requestToHandle,
86-
} ),
87-
],
88-
entry: {
89-
index: './assets/source/setup-task/index.js',
90-
},
91-
output: {
92-
filename: '[name].js',
93-
path: __dirname + '/assets/setup-task',
94-
},
9551
};
9652

97-
module.exports = [
98-
SetupGuide,
99-
SetupTask
100-
];
53+
module.exports = [ SetupGuide, SetupTask ];

0 commit comments

Comments
 (0)