Better

Ethan的博客,欢迎访问交流

升级 umi@3 的踩坑感受

公司中后台采用了 Ant Design Pro 模板,该模板与 umi 技术选型相结合的,我司最近要求升级一波依赖,于是踏上了自闭之旅。

背景

项目之前是基于 umi@2 版本,umi@3 做了一些列优化,从开发者的角度而言,主要有两点

  • 依赖包集中收敛:之前需要导入乱七八糟一大堆东西,不深究也不知道是干嘛的,但作为强迫症而言,看着实在难受,umi@3 将依赖集中在 @umijs/preset-react 中,至少看上去显得更加专业些,也让强迫症舒服很多
  • import all from umi:不用在记那么多的 import 方式了,全部从 umi 中导出,开发成本会低一些

umi@3 其他的一些改变

  • 配置方式改变
  • 自动化插件机制:扫描 package.json,对于 umi 的 plugin 会自动化注册
  • locale 的封装,打了自己过去的脸,不推荐一种可能存在问题的用法,关键是之前还被我当成了它们的 feature,嗅!

Ant Design Pro 的一些变动

  • 优化了部分内置组件
  • 使用 hooks 改写了部分组件
  • 优化了 script 脚本
  • 更新权限认证模块

踩的坑

在单测方面卡了很多,一部分是自己的锅,但也有 umi 的锅,还有 jest 的锅

  • 自己的锅,为了配合 CI 工作,修改 jest 的 reporters 配置,采用 jest-json-reporter2 进行 json 化输出,这里还是应该保留 default 选项,否则控制台看不到任何的报错
  • umi 的锅,特意去找了下 umi@2 中依赖 umi-test 的源码,其会读取 webpack alias 配置,然后自动修改 moduleNameMapper 配置,但 umi@3 并没有这么做,而且文档中也没有提,导致通过 @ 别名 import 文件报错。同时 umi@3 并没有 extraSetupFiles 配置项目,这一块官网也并没有提过,巨坑
  • jest 会莫名其表报错 cache transform error,导致单测失败,查询其 issue 并没有解决方式,于是通过设置 cache: false 关闭 cache 功能解决

感悟

这个升级还是让自己有点自闭的,总结几点感悟吧

  • 虽然使用了优秀的开源的项目模板,但一些配置的具体作用还是要了解透彻,不然在将来的某一天一定会坑你
  • 对自己的要有信心哇,开源项目的代码质量也是参差不齐的,对于优秀的地方,积极学习实践,不优秀的地方要敢于质疑
  • 不要企图希望其升级文档能涵盖方方面面,对于不太成熟的项目更是如此,他可能会做了 break change,但他自己忘记了,因此更不可能有文档。如果问题一直解决不了,大胆的直接去看源码,发现问题也许会快得多的多

也许 umi 并不能满足你对前端最佳实践的期待,但可以看出 umi 团队一直在积极探索,这是值得肯定的,而且很多沉淀,都非常值得学习借鉴。个人还挺期待的!



留言