记react ant-design-pro 打包优化

基于react+ant-design-pro(4.5.0)+umi项目打包需要时间十几分钟,每次打包发布都非常的慢,等待的时间很长。

通过 npm run analyze 可以很清楚看到打包的情况,发现很大的包里引入的插件占比非常大,可以把这些插件提取出来,减少包的体积和打包速度。

// https://umijs.org/config/
import { defineConfig } from 'umi';
import defaultSettings from './defaultSettings';
import proxy from './proxy';
import routes from './routes';
const { REACT_APP_ENV } = process.env;

const chunkCacheGroups = {
  umijs: {
    name: 'chunk-umi-js',
    test: /[\\/]node_modules[\\/]_?(@umijs)[\\/]/,
    priority: 60,
  },
  rcform: {
    name: 'chunk-rcform',
    test: /[\\/]node_modules[\\/]_?((rmc-.*)|(rc-.*))(.*)/,
    priority: 50,
    enforce: true,
  },
  antd: {
    name: 'chunk-antd',
    test: /[\\/]node_modules[\\/]_?(antd)(.*)/,
    priority: 50,
    enforce: true,
  },
  antpro: {
    name: 'chunk-ant-design',
    test: /[\\/]node_modules[\\/](@ant-design)[\\/]pro(.*)/,
    priority: 50,
    enforce: true,
  },
  antproicon: {
    name: 'chunk-ant-design-icon',
    test: /[\\/]node_modules[\\/](@ant-design)[\\/]icons(.*)/,
    priority: 50,
    enforce: true,
  },
  react: {
    name: 'chunk-react',
    test: /[\\/]node_modules[\\/](react|react-dom|(react(.*))|react-color|react-copy-to-clipboard|react-helmet-async)[\\/]/,
    priority: 55,
    enforce: true,
  },
  utils: {
    name: 'chunk-utils',
    test: /[\\/]node_modules[\\/]_?(use-merge-value|shortid|qs|moment|lodash(.*)|lodash|use-media-antd-query|use-media-antd-query|material-color|intersection-observer)[\\/]/,
    priority: 55,
    enforce: true,
  },
  libs: {
    name: 'chunk-libs',
    test: /[\\/]node_modules[\\/](component-classes|t-non-react-statics|shallowequal|raf|classnames|fbjs|array-tree-filter|dom-align|add-dom-event-listener|css-animation|tinycolor2|swr|ua-parser-js|viewerjs)[\\/]/,
    priority: 50,
    enforce: true,
  },
  utilsVendor: {
    name: 'chunk-utils-vendor',
    test: /[\\/]utils[\\/]/,
    priority: 50,
    enforce: true,
  },
};

// chunk-name
const getSplitChunks = () => {
  const chunks = Object.values(chunkCacheGroups);
  const chunkBundles = [];
  chunks.map((chunk, key) => {
    chunkBundles[key] = chunk.name;
  });
  return chunkBundles;
};


export default defineConfig({
  ...,
  chunks: REACT_APP_ENV !== 'dev' ? [...getSplitChunks(), 'umi'] : undefined,
  chainWebpack(config, { webpack }) {
    if (REACT_APP_ENV === 'dev') return;
    config.merge({
      optimization: {
        splitChunks: {
          chunks: 'all', // async 不会打包静态引用的文件
          minSize: 30000, // 30000 大于这个值的文件会被提取成单独文件
          minChunks: 3,
          automaticNameDelimiter: '.',
          cacheGroups: chunkCacheGroups,
        },
      },
    });
  },
});

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值