zoukankan      html  css  js  c++  java
  • antDPro打包优化

    通过npm run analyze查看打包情况,发现chunks中包含大量的重复打包

    通过提取公共chunk来实现减少打包体积以及提高打包速度

    从原来的20M经过拆包之后  最终变成了4M   官方文档   https://umijs.org/zh-CN/config#chainwebpack

    // 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,
      },
      braft: {
        name: 'chunk-braft-js',
        test: /[\\/]node_modules[\\/]_?(braft(.*))[\\/]/,
        priority: 55,
        enforce: true,
      },
      draft: {
        name: 'chunk-draft-js',
        test: /[\\/]node_modules[\\/]_?(draft(.*))[\\/]/,
        priority: 55,
        enforce: true,
      },
      immutable: {
        name: 'chunk-immutable-js',
        test: /[\\/]node_modules[\\/]_?(immutable)[\\/]/,
        priority: 55,
        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,
            },
          },
        });
      },
    });
  • 相关阅读:
    理性即自由
    解决问题的思路是怎样的?
    联系的结构-深度思考
    思考力,才是真正的第一生产力-快思考、慢思考
    CentOS7在防火墙与端口上的操作
    linux如何查看nginx是否启动
    Git篇
    Git 常用命令总结
    siblings() 获得匹配集合中每个元素的同胞
    Mysql查看版本号的五种方式介绍
  • 原文地址:https://www.cnblogs.com/cazj/p/15699206.html
Copyright © 2011-2022 走看看