APP下载

将 30 万行程式码从 Flow 迁移到 TypeScript 是一种怎样的体验?

消息来源:baojiabao.com 作者: 发布时间:2024-11-29

报价宝综合消息将 30 万行程式码从 Flow 迁移到 TypeScript 是一种怎样的体验?

作者 | Roger Goldfinger

译者 | 弯月

责编 | 伍杏玲

出品 | CSDN(ID:CSDNnews)

【CSDN 编者按】本文作者在当前正在使用 Flow 下,想一次性切换到TypeScript,涉及30万行程式码,他们迁移的过程值得我们借鉴:先合并TypeScript工具,再反复进行练习,成功在12分钟内成功通过CI流程,并最后修复错误。

我们公司一直致力于改善开发人员的工作体验。在使用Flow度过了两年愉快的开发时光后,最近我们决定转而采用TypeScript,因为TypeScript有良好的社群支援、好的编辑体验、支援的型别也更多。

于是,我们决定一次性把Flow转成TypeScript。

我们使用自动转换工具迁移了2,700个Javascript档案,并在12分钟内成功通过CI流程,接下来我们立刻就能享受新语言带来的优势了。与逐步迁移相比,(这样做)我们省却了大量的操作复杂性,并最大限度地减轻了给工程团队带来的负担和影响。在经过了一周的TypeScript学习后,软件工程师们再次重回岗位,开始了更为迅速地开发作业。

为何做出这种改变?

在过去的两年中,我们一直在使用Flow来处理我们Javascript程式码中的型别。我们有40名工程师负责开发Web程式码,良好的型别系统可以确保程式码的正确性、加快新来工程师的适应速度,且有助于安全的重构。当时,Flow是一个正确的选择,逐步采用支援意味着我们可以慢慢适应。

最近随着TypeScript的崛起,越来越多的人选择TypeScript,我们也仔细研究了我们使用的Flow。一直以来我们都知道,Flow与编辑器的整合有时非常缓慢,而且应用程序的核心部分(比如Redux状态和元件props)并没有新增有意义的型别,部分原因是Flow对redux和reselect的typedef支援有问题。由于相应的Flow型别库的维护者已经很长时间没有更新了,所以我们也担心Flow的未来。

在开始接触TypeScript后,我们惊人地发现VSCode对该编辑器的支援非常好,而且还有很多非常有帮助的错误讯息,此外社群的支援也很给力。再加上其他流行的程式码库和专案,让我们欣喜若狂,我们越发肯定这是正确的方向。

实际的程式码迁移过程

迁移近30万行的程式码,这个工作量似乎超出了手动的承受范围,所以我们决定一次性转换整个程式码库,使用babel外挂完成语法的修改,再通过一个指令码重新命名档案。

我们考虑过逐步迁移,一次将一个档案迁移到TypeScript中。为了在迁移期间保留跨语言的型别,我们可以输出两种语言的定义档案,然后生成这些定义档案到另一种语言的转换。最终,我们担心这种方法过于复杂,工程师必须掌握程式码库中两种不同的语言,并且迁移可能需要很长时间,这个过程通常还会增加现有工作的复杂性。

为了准备大规模迁移,首先我们合并了TypeScript工具,例如配置Babel和设定ESLint。我们一遍又一遍地反复练习迁移的过程,练习快速地可靠地让转换后的程式码库通过CI流程,并在执行手册上记录了这个过程。

到最后的时候,我们能够在12分钟内完成所有的程式码迁移,并执行完所有的手动步骤通过CI流程。这确保我们能够最大限度地减少对工程师现有工作的干扰,并确保我们有时间解决意外发生的问题。

最后,在我们约定好的那一天,我们快速冻结了程式码库,然后执行了手册上的所有步骤,对这些变更进行了一些手动测试,并将程式码合并到了生产中。

修复错误

当然,迁移到TypeScript中的程式码库存在很多错误(大约有6千多个),我们决定暂且通过注释// @ ts-ignore忽略这些错误,先通过CI流程再说。毕竟,Flow的型别覆盖没有捕获到这些错误。只有忽略这些错误,我们才能够一次性地完成迁移,而无需在修复错误的过程中冻结整个程式码库。

我们编写了一个指令码,自动将// @ ts-ignore注释插入到我们的大多数程式码中,同时保证这些忽略掉的都是因为JSX过于复杂。于是,我们的JSX中残留了大约1,400个错误,在接下来的一周里,我们每个人都动手修复这些错误。这为我们每个人提供了一次很好的学习TypeScript的机会,在修复剩余错误的过程中,我们熟悉了型别系统和最佳实践。

迁移成功

总体而言,此次程式码迁移非常成功。我们将型别覆盖率从66%增加到86%,现在从Redux联结器到React元件树,都已经拥有完整的型别定义。VSCode提供的编辑体验更加便捷,更加可靠,我们在修复错误时,发现了更多程式码中的错误。最重要的是,工程师开始信任型别系统。

当然,在迁移过程中,还有一些有待改善的地方。在内部反省会议上,我们提出了以下有待改进的地方:

我们应该开展更多教育和配对活动,并共同努力解决常见的错误。每个团队的TypeScript代表都应该积极地传播知识并推动程式码迁移。

我们应该事先为产品团队所需的工作设定更清晰的期望,并为团队提供一种简单的方法,让他们知道他们应该做什么工作以及迁移过程中剩下的工作。

我们应该花更多的时间来确保UI元件和其他联结器程式码已加入了正确的型别。

在接下来几个月内,我们将继续做一些更新,并为实现型别错误的零忽略而继续努力。

原文:https://medium.com/tech-quizlet/now-or-never-migrating-300k-loc-from-flow-to-typescript-at-quizlet-d3bae5830a1

本文为 CSDN 翻译,转载请注明来源出处。

【END】

2020-02-02 18:03:00

相关文章