const path = require('path'); module.exports = { webpack: { alias: { '@': path.resolve(__dirname, 'src/') }, configure: (webpackConfig) => { // Always remove ESLint for better performance webpackConfig.plugins = (webpackConfig.plugins || []).filter((plugin) => { const name = plugin && plugin.constructor && plugin.constructor.name; if (name === 'ESLintWebpackPlugin') return false; return true; }); // Optimize for production builds if (process.env.NODE_ENV === 'production') { // Reduce memory usage during build webpackConfig.optimization = { ...webpackConfig.optimization, splitChunks: { chunks: 'all', cacheGroups: { defaultVendors: { test: /[\\/]node_modules[\\/]/, priority: -10, reuseExistingChunk: true, }, default: { minChunks: 2, priority: -20, reuseExistingChunk: true, }, }, }, // Use single runtime chunk runtimeChunk: 'single', }; // Limit parallelism of existing minimizers to lower memory footprint if (Array.isArray(webpackConfig.optimization.minimizer)) { webpackConfig.optimization.minimizer = webpackConfig.optimization.minimizer.map((minimizer) => { const name = minimizer && minimizer.constructor && minimizer.constructor.name; if (name === 'TerserPlugin') { if (minimizer.options) { minimizer.options.parallel = false; minimizer.options.extractComments = false; } } if (name === 'CssMinimizerPlugin' || name === 'CssMinimizerWebpackPlugin') { if (minimizer.options) { minimizer.options.parallel = 1; } } return minimizer; }); } // Disable source maps if env variable is set if (process.env.GENERATE_SOURCEMAP === 'false') { webpackConfig.devtool = false; } } return webpackConfig; }, } };