diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index d99cc9b035d8b..d1059a26c7cb7 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -279,6 +279,12 @@ function wp_default_packages_scripts( $scripts ) { */ $assets = include ABSPATH . WPINC . "/assets/script-loader-packages{$suffix}.php"; + // Add the private version of the Interactivity API manually. + $assets[ "interactivity{$suffix}.js" ] = array( + 'dependencies' => array(), + 'version' => '6.4.0', + ); + foreach ( $assets as $file_name => $package_data ) { $basename = str_replace( $suffix . '.js', '', basename( $file_name ) ); $handle = 'wp-' . $basename; diff --git a/tools/webpack/blocks.js b/tools/webpack/blocks.js index df2a78abe81a9..4c1fcae1432a2 100644 --- a/tools/webpack/blocks.js +++ b/tools/webpack/blocks.js @@ -65,15 +65,66 @@ module.exports = function( env = { environment: 'production', watch: false, buil const config = { ...baseConfig( env ), entry: { - 'file/view': normalizeJoin(baseDir, `node_modules/@wordpress/block-library/build-module/file/view` ), - 'navigation/view': normalizeJoin(baseDir, `node_modules/@wordpress/block-library/build-module/navigation/view` ), - 'navigation/view-modal': normalizeJoin(baseDir, `node_modules/@wordpress/block-library/build-module/navigation/view-modal` ), - 'search/view': normalizeJoin(baseDir, `node_modules/@wordpress/block-library/build-module/search/view` ), + 'navigation/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/navigation/view' ), + 'image/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/image/view' ), + 'query/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/query/view' ), + 'file/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/file/view' ), + 'search/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/file/view' ), }, output: { devtoolNamespace: 'wp', - filename: `[name]${ suffix }.js`, - path: normalizeJoin(baseDir, `${ buildTarget }/blocks` ), + filename: `./blocks/[name]${ suffix }.js`, + path: normalizeJoin( baseDir, buildTarget ), + chunkLoadingGlobal: `__WordPressPrivateInteractivityAPI_${ Math.floor( Math.random() * 1000 ) }__`, + }, + resolve: { + alias: { + '@wordpress/interactivity': normalizeJoin( baseDir, 'node_modules/@wordpress/interactivity/src/index.js' ), + }, + }, + optimization: { + ...baseConfig.optimization, + runtimeChunk: { + name: 'private-interactivity', + }, + splitChunks: { + cacheGroups: { + interactivity: { + name: 'private-interactivity', + test: /^(?!.*[\\/]block-library[\\/]).*$/, + filename: `./js/dist/interactivity${suffix}.js`, + chunks: 'all', + minSize: 0, + priority: -10, + }, + }, + }, + }, + module: { + rules: [ + { + test: /\.(j|t)sx?$/, + use: [ + { + loader: require.resolve( 'babel-loader' ), + options: { + cacheDirectory: process.env.BABEL_CACHE_DIRECTORY || true, + babelrc: false, + configFile: false, + presets: [ + [ + '@babel/preset-react', + { + runtime: 'automatic', + importSource: 'preact', + }, + ], + ], + }, + }, + ], + }, + ], }, plugins: [ new DefinePlugin( { @@ -85,6 +136,7 @@ module.exports = function( env = { environment: 'production', watch: false, buil } ), new DependencyExtractionPlugin( { injectPolyfill: false, + useDefaults: false, } ), new CopyWebpackPlugin( { patterns: [ diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js index 90c4f8deff407..65747bdf8e2ba 100644 --- a/tools/webpack/packages.js +++ b/tools/webpack/packages.js @@ -53,7 +53,7 @@ module.exports = function( env = { environment: 'production', watch: false, buil buildTarget = buildTarget + '/wp-includes'; const WORDPRESS_NAMESPACE = '@wordpress/'; - const BUNDLED_PACKAGES = [ '@wordpress/icons', '@wordpress/interface' ]; + const BUNDLED_PACKAGES = [ '@wordpress/icons', '@wordpress/interface', '@wordpress/interactivity' ]; const packages = Object.keys( dependencies ) .filter( ( packageName ) => ! BUNDLED_PACKAGES.includes( packageName ) &&