From 34cf399e1048da1028b8b3a9e7aa397478f24335 Mon Sep 17 00:00:00 2001 From: Akshit Bansal <155195875+akshitbansal2005@users.noreply.github.com> Date: Thu, 3 Oct 2024 08:17:40 +0530 Subject: [PATCH] chore: Update webpack.config.js (#51098) --- webpack.config.js | 109 +++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 55 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 751dd59609..84bf777ae4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -7,86 +7,85 @@ const CircularDependencyPlugin = require('circular-dependency-plugin'); const DuplicatePackageCheckerPlugin = require('@madccc/duplicate-package-checker-webpack-plugin'); const path = require('path'); -function addLocales(webpackConfig) { +function addLocales(config) { + const newConfig = { ...config }; // Avoid mutating the original config let packageName = 'antd-with-locales'; - if (webpackConfig.entry['antd.min']) { + if (newConfig.entry['antd.min']) { packageName += '.min'; } - webpackConfig.entry[packageName] = './index-with-locales.js'; - webpackConfig.output.filename = '[name].js'; + newConfig.entry[packageName] = './index-with-locales.js'; + newConfig.output.filename = '[name].js'; + return newConfig; } function externalDayjs(config) { - config.externals.dayjs = { + const newConfig = { ...config }; // Shallow copy for safety + newConfig.externals.dayjs = { root: 'dayjs', commonjs2: 'dayjs', commonjs: 'dayjs', amd: 'dayjs', }; + return newConfig; } function externalCssinjs(config) { - config.resolve = config.resolve || {}; - config.resolve.alias = config.resolve.alias || {}; + const newConfig = { ...config }; // Shallow copy for safety + newConfig.resolve = newConfig.resolve || {}; + newConfig.resolve.alias = newConfig.resolve.alias || {}; + newConfig.resolve.alias['@ant-design/cssinjs'] = path.resolve(__dirname, 'alias/cssinjs'); + return newConfig; +} - config.resolve.alias['@ant-design/cssinjs'] = path.resolve(__dirname, 'alias/cssinjs'); +function addPluginsForProduction(config) { + const newConfig = { ...config }; // Shallow copy for safety + if (!process.env.CI || process.env.ANALYZER) { + newConfig.plugins.push( + new BundleAnalyzerPlugin({ + analyzerMode: 'static', + openAnalyzer: false, + reportFilename: '../report.html', + }) + ); + } + if (newConfig.mode === 'production' && !process.env.PRODUCTION_ONLY) { + newConfig.plugins.push( + new DuplicatePackageCheckerPlugin({ + verbose: true, + emitError: true, + }) + ); + } + + newConfig.plugins.push( + codecovWebpackPlugin({ + enableBundleAnalysis: process.env.CODECOV_TOKEN !== undefined, + bundleName: 'antd.min', + uploadToken: process.env.CODECOV_TOKEN, + }), + new CircularDependencyPlugin({ + failOnError: true, + }) + ); + + return newConfig; } let webpackConfig = getWebpackConfig(false); -// Used for `size-limit` ci which only need to check min files if (process.env.PRODUCTION_ONLY) { - // eslint-disable-next-line no-console console.log('🍐 Build production only'); webpackConfig = webpackConfig.filter((config) => config.mode === 'production'); } -// RUN_ENV: https://github.com/ant-design/antd-tools/blob/14ee166fc1f4ab5e87da45ee3b0643a8325f1bc3/lib/gulpfile.js#L48 if (process.env.RUN_ENV === 'PRODUCTION') { - webpackConfig.forEach((config) => { - addLocales(config); - externalDayjs(config); - externalCssinjs(config); - // Reduce non-minified dist files size - config.optimization.usedExports = true; - - if (!process.env.CI || process.env.ANALYZER) { - config.plugins.push( - new BundleAnalyzerPlugin({ - analyzerMode: 'static', - openAnalyzer: false, - reportFilename: '../report.html', - }), - ); - } - - if (config.mode !== 'production') { - return; - } - - if (!process.env.PRODUCTION_ONLY) { - config.plugins.push( - new DuplicatePackageCheckerPlugin({ - verbose: true, - emitError: true, - }), - ); - } - - config.plugins.push( - codecovWebpackPlugin({ - enableBundleAnalysis: process.env.CODECOV_TOKEN !== undefined, - bundleName: 'antd.min', - uploadToken: process.env.CODECOV_TOKEN, - }), - ); - - config.plugins.push( - new CircularDependencyPlugin({ - // add errors to webpack instead of warnings - failOnError: true, - }), - ); + webpackConfig = webpackConfig.map((config) => { + let newConfig = addLocales(config); + newConfig = externalDayjs(newConfig); + newConfig = externalCssinjs(newConfig); + newConfig.optimization.usedExports = true; + newConfig = addPluginsForProduction(newConfig); + return newConfig; }); }