const defaultConfig = require('@wordpress/scripts/config/webpack.config'); const WooCommerceDependencyExtractionWebpackPlugin = require( '@woocommerce/dependency-extraction-webpack-plugin' ); const {getWebpackEntryPoints, getWordPressSrcDirectory} = require('@wordpress/scripts/utils/config'); const fs = require('fs'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const src = getWordPressSrcDirectory(); const plugins = `block-plugins` function isDir(path) { try { let stat = fs.lstatSync(path); return stat.isDirectory(); } catch (e) { // lstatSync throws an error if path doesn't exist return false; } } module.exports = { ...defaultConfig, entry : { ...getWebpackEntryPoints(), ...fs .readdirSync(`./${src}/${plugins}`) .reduce((acc, path) => { if (path.includes(`.php`)) { return acc; } acc[`${plugins}/${path}`] = `./${src}/${plugins}/${path}`; return acc; }, {}), }, output : { ...defaultConfig.output, filename : (pathData) => { if (!pathData.chunk.name.includes(`${plugins}`)) { return '[name].js'; } if (pathData.chunk.name.includes(`${plugins}`) && isDir(`./${src}/${pathData.chunk.name}`)) { return `[name]/index.js`; } return '[name]'; }, }, plugins : [ ...defaultConfig.plugins.filter(( plugin ) => plugin.constructor.name !== 'DependencyExtractionWebpackPlugin'), new WooCommerceDependencyExtractionWebpackPlugin(), new CopyWebpackPlugin({ patterns : [ { from : `${plugins}/**/{block.json,*.php,*.css}`, context : src, noErrorOnMissing : true, } ], }), ], }