Umijs项目优化

首先通过npm run analyze 查看打包后的文件进行观察,哪些包的体积大,然后分解开
在这里插入图片描述
体积较大的文件:echarts、wangeditor、antd、moment.js

package.json 文件配置
在这里插入图片描述
.umirc.ts配置文件
在这里插入图片描述

1. 分包配置


通过 webpack-chain 的 API 修改 webpack 配置。

chunks: process.env.NODE_ENV === 'production' ? ['echarts', 'antdesigns', 'vendors', 'commons', 'umi'] : ['umi'],
  chainWebpack: function (config: any) {
        if (process.env.NODE_ENV === 'production') {
            config.merge({
                optimization: {
                    minimize: true,
                    splitChunks: {
                        chunks: 'all', //async异步代码分割 initial同步代码分割 all同步异步分割都开启
                        automaticNameDelimiter: '.',
                        name: true,	// 缓存组里面的filename生效,覆盖默认命名
                        minSize: 30000, // 引入的文件大于30kb才进行分割
                        //maxSize: 50000, // 50kb,尝试将大于50kb的文件拆分成n个50kb的文件
                        minChunks: 1, // 模块至少使用次数
                        // maxAsyncRequests: 5,    // 同时加载的模块数量最多是5个,只分割出同时引入的前5个文件
                        // maxInitialRequests: 3,  // 首页加载的时候引入的文件最多3个           
                        cacheGroups: {
                            echarts: {
                                name: 'echarts',
                                chunks: 'all',
                                test: /[\\/]node_modules[\\/](echarts)/,
                                priority: 10,
                                enforce: true,
                            },
                            antdesigns: {
                                name: 'antdesigns',
                                chunks: 'all',
                                test: /[\\/]node_modules[\\/](@antv|antd|@ant-design)/,
                                priority: 10,
                            },
                            vendors: {
                                name: 'vendors',
                                chunks: 'all',
                                test: /[\\/]node_modules[\\/](lodash-es|moment|react|dva)/,
                                priority: 10,
                            },
                            commons: {
                                name: 'commons',
                                chunks: 'all',
                                // minChunks: 2,
                                priority: 1,
                                enforce: true,
                            },
                        },
                    },
                },
            })
         
       
    },

2. Gzip压缩

 chainWebpack: function (config: any) {
 //gzip压缩
            config.plugin('compression-webpack-plugin').use(CompressionPlugin, [
                {
                    test: /.(js|html|css)$/i, //匹配文件名
                    threshold: 10240, //对超过10k的数据压缩
                    deleteOriginalAssets: false, //不删除源文件
                },
            ])
            }

3. 组件懒加载

需要开启mfsu,umi 版本 “umi”: “^3.5.41”,

  	  mfsu: {},
     webpack5: {},
     dynamicImport: {
         // @ 默认指到 src 目录
         loading: '@/pages/Loading',
     },

4. moment.js 语言包剔除

  chainWebpack: function (config: any) {
        config.plugin('moment-locale').use(require('webpack').ContextReplacementPlugin, [/moment[\/\\]locale$/, /en|zh-cn/])
    },

5.lodash替换方案lodash-es


“lodash-es”: “^4.17.21”,

调整后
在这里插入图片描述

<think>好的,我现在需要解决用户关于Umi 3.5.20项目中没有babel.config.jswebpack.config.js的问题。首先,我得回忆一下Umi框架配置机制。Umi是一个基于React的可扩展企业级前端应用框架,它内置了很多开箱即用的功能,并且推崇“约定优于配置”的理念。 用户提到使用的是Umi 3.5.20版本,所以我要确保我的知识适用于这个特定版本。在Umi中,通常不需要手动创建babel.config.jswebpack.config.js,因为Umi已经封装了这些配置,通过自身的配置文件.umirc.ts或config/config.ts来管理项目设置。不过,如果用户需要自定义Babel或Webpack配置Umi提供了相应的覆盖机制。 接下来,我需要确认用户为什么会找不到这两个文件。可能的情况是,Umi默认隐藏了这些配置,用户需要通过特定的方式来扩展或修改。例如,Umi允许在项目根目录下创建config文件夹,并在其中添加配置文件,或者使用.umirc.ts来覆盖默认配置。对于Babel,可以通过配置extraBabelPresets或extraBabelPlugins来添加额外的预设或插件,而不需要直接编辑babel.config.js。同样,Webpack配置可以通过chainWebpack或configureWebpackUmi配置文件中进行修改。 另外,可能需要检查Umi的文档,特别是3.x版本的文档,看看是否有关于自定义Babel和Webpack配置的具体说明。例如,Umi的官方文档中提到了如何通过配置文件来扩展Webpack配置,使用webpack-chain的API来修改已有的配置。对于Babel,除了上述的extraBabelPresets和extraBabelPlugins,可能还有其他配置项可用。 还需要考虑用户是否可能误用了其他框架配置方式,比如Create React App,这些工具通常会隐藏配置文件,需要执行eject操作才能暴露出来。但Umi的设计理念不同,它提供了更灵活的配置方式,不需要eject,而是通过配置文件或约定来管理。 总结一下,用户的问题在于Umi默认不生成这些配置文件,但提供了其他方法来定制Babel和Webpack。我需要将这些方法清晰地解释给用户,并提供具体的配置示例,说明如何通过Umi配置文件来实现原本需要在babel.config.jswebpack.config.js中完成的配置。</think>在 Umi 3.x 项目中(包括 3.5.20 版本),默认采用「零配置」设计理念。以下是关键点说明: ### 一、配置文件现状 1. 没有默认生成 `babel.config.js` 和 `webpack.config.js` 2. 核心配置集中在 `.umirc.ts` 或 `config/config.ts` 3. 内置了经过优化的默认构建配置 ### 二、自定义配置方式 #### Babel 配置 ```typescript // config/config.ts export default { extraBabelPresets: [ ['@babel/preset-env', { targets: { chrome: 80 } }] ], extraBabelPlugins: [ ['babel-plugin-import', { libraryName: 'antd', style: true }] ] } ``` #### Webpack 配置 ```typescript // config/config.ts export default { chainWebpack(memo, { env, webpack }) { memo.plugin('define').use(webpack.DefinePlugin, [{ PRODUCTION: JSON.stringify(true) }]) } } ``` ### 三、查看实际配置 1. 运行 `umi inspect` 查看完整 webpack 配置 2. 执行 `umi babel` 查看最终 Babel 配置 ### 四、特殊需求处理 如需独立配置文件,可通过以下方式创建: ```bash # 生成临时 webpack 配置 umi generate tmp # 查看生成的临时文件路径 ➜ .umi ➜ tmp ➜ config.json # 包含最终配置详情 ``` ### 五、最佳实践建议 1. 优先使用 Umi 内置配置项 2. 需要扩展时使用 `extraBabel*` 系列配置 3. 复杂 Webpack 定制使用 `chainWebpack` 方法 4. 升级到 Umi 4.x 可获得更好的 MFSU 支持 这种设计降低了配置复杂度,同时保留了灵活扩展能力。实际项目中 90% 的需求都可以通过官方配置项实现,无需直接操作底层配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值