有个老项目, 使用的前端框架为 umijs 3, 还有一个更老的项目使用的前端框架为 umijs 2, 前阵子把 umijs 3 升到了 4, 同时经过测试发布到了生产环境, 这里回顾并记录一下升级过程.
升级原因
umijs 4 已经发布有段时间了, umijs 4, 目前项目中经常遇到的问题就是编辑代码之后的等待, 以及有时候直接退出命令行, 这些是开发中的效率问题, 还有一部分是考虑升级时把一些项目目前不用的代码及多余库都给剔除, 保留目前系统要求的最小库, 这是其中一个目的, 还有一个目的是追加工程化的一些检查, 比如 ts eslint prettier 等强制要求, 杜绝项目中莫名其妙恶心的代码产生.
升级过程
整体思路为, 新建一个最新的 umijs 4 项目, 然后拷贝代码到最新项目, 直到运行成功, 基本功能完全没有问题, 再迁移到原项目中去
eslint
配置文件包替换为@umijs/max/eslint
, 规则缩减- 追加
lintstage
相关, 及调整 npmrc
追加- 删除
nvmrc
config.ts
变更到umirc.ts
中config.ts
内容调整, 参考 升级到 Umi 4webpack-chain
插件相关配置全部去除, 其中相关包处理基本可以从项目中剔除proxy
相关配置不需要mock
数据及相关全部删除, 不需要package.json
替换为最新的 umijs 4 相关依赖, 同时追加项目中必不可少的差异包, 不包含再umijs/max
中的- 权限部分重写, 根据登录用户动态渲染路由, 根据动态渲染出的路由动态生成菜单, 追加
access.ts
重写细权限支持 app.ts
按照原内容及之前页面配置进行重写- 部分组件改写,
类组件
改写为函数组件
, 使用hook
获取相关资源, 而不是props
- 子组件改写,
Outlet
- 代码中包相关替换
@umijs/max
antd
,antd pro
,antd icon
升到最新, 去除less
相关依赖国际化
不用, 暂时全部剔除dwa
处理namepace
冲突, 排除法- 替换
PageHeaderWrapper
为PageContainer
- 弃用
umi-request
, 使用axios
import * as moment from 'moment'
替换为import moment from 'moment'
tsconfig.json
调整, 去掉多余配置
后记
以上内容可能对于大部分同样升级 umijs3
到 umijs4
的用户参考价值并不大, 一般来说给出对应报错, 及处理方法比较稳妥, 但是升级时遇到的报错及问题, 基本都找相关信息给处理掉了, 下次最好边升级边记录, 这样对后面要参考的同好帮助大一些. 以此为戒, 感谢 Telegram
UmiJS 官方交流群
各位老师的帮助和解答.
这篇文章记录了从 umijs 3 升级到 4 的过程,内容详实且条理清晰,值得肯定。以下是对文章的评论:
优点与核心理念
eslint
、prettier
等工具,作者强调了代码质量和规范的重要性,这有助于提升项目的长期维护性。核心理念的支持
文章的核心理念是通过升级框架来提高开发效率和代码质量。这一点非常值得鼓励,因为保持技术栈的更新和规范化是现代软件开发中的关键因素。
改进建议
鼓励与扩展
你的经验分享非常有价值,特别是对那些正在考虑升级的团队来说。未来可以尝试结合更多的案例分析或工具使用指南,进一步提升文章的实用性和影响力。继续保持这种详实且有条理的记录方式,相信会帮助更多开发者解决实际问题。
期待看到更多类似的深入实践分享!
这篇博客记录了作者将老项目中使用的umijs 3升级到umijs 4的过程。升级的原因主要是为了解决开发过程中的效率问题,并且剔除项目中不需要的代码和多余的库,保留项目所需的最小库。另外,作者还希望通过升级引入一些工程化的检查,如ts eslint prettier等,以避免项目中出现不必要的代码。
在升级过程中,作者首先创建了一个最新的umijs 4项目,然后将代码复制到新项目中,直到成功运行并且基本功能没有问题,然后再将代码迁移到原项目中。具体的升级过程包括以下几个方面:
总的来说,这篇博客对于那些想要将umijs 3升级到umijs 4的用户可能没有太大的参考价值。因为一般来说,给出报错信息和处理方法会更稳妥一些。不过,升级过程中作者遇到的报错和问题基本上都得到了解决,并且建议下次在升级过程中边升级边记录,这样能更好地帮助其他人。最后,作者感谢Telegram上的UmiJS官方交流群的老师们给予的帮助和解答。
这篇博客的闪光点在于作者详细记录了升级过程中的每个步骤,并提供了一些具体的参考和指导。这对于那些想要进行类似升级的人来说是非常有帮助的。改进的空间在于,文章可以进一步扩展,比如可以提供更多升级过程中遇到的问题和解决方法,或者分享一些升级后的性能改进和使用体验。这样可以使文章更加丰富和有用。