返回
ESLint + lint-staged + husky 三剑客之老项目如何过渡升级?
前端
2023-09-24 19:57:19
ESLint作为插件化的javascript代码检测工具,为我们的平时的开发保驾护航,好处就不多说了详情查看官网。
有这么一个五年前开发的老项目,机缘巧合到了我们这边来维护。
项目是zepto撸起来的,单个文件巨大,只有gulp+公司内部古老的打包工具做了下简单的打包。
但是问了一圈公司这边前端同学,基本对这个项目毫无所知。
甚至管理系统中没有这个项目的任何记录,唯一能找到的就是代码,公司的另一位运维同事还帮我找了下项目的服务器的地址和账号。
这个项目的代码维护现状如下:
- 十分庞大,初始化十分缓慢,mac提示说
打开的文件数量超过限制
- 前端代码是一个文件,后端代码是一个文件,根据业务的不同,这两个文件的代码会合并在一起作为打包产出。
- gulp和打包工具早已淘汰,已经找不到相关的资料。
- 虽说是zepto撸起来,但使用了非常多市面上不流行的zepto的插件。
通过这样的一个现状分析,我了解到项目的情况后,给项目定义了如下的几个目标:
- 引入ESlint + lint-staged + husky对代码质量进行管理。
- 剥离zepto,实现打包工具升级。
- 实现老项目和新项目统一标准,规范版本管理,保证一致代码质量。
既然已经明确了目标,那么接下来就进行一些规划了。
- 首先,先使用git对代码进行初始化,配置gitlab仓库,这里涉及到项目仓库的命名问题,因为公司内部要求一致,所以我们需要做到老项目的仓库名与新项目的仓库名保持一致。
- 然后,创建一个脚手架项目,然后初始化ESlint + lint-staged + husky,配置相关规范,配置package.json,简单尝试使用webpack打包。
- 对老项目的各个逻辑文件进行拆分,按模块组建进行重写,并对新逻辑进行ESLint规范,接着对一些旧逻辑进行ESLint规范和优化。
- 写好逻辑后,根据各个逻辑的关联性进行组合,组合成最终的main文件。
- 使用webpack进行打包。
- 这样子完成了项目的前端模块化拆分工作,以及代码的规范化工作,webpack相关的可以参考webpack官方文档,这里不再展开介绍。
- 接下来,还需要将此仓库与主项目的仓库进行合并,代码的合并包括代码逻辑合并,提交历史合并。
- 最后,再次对项目的逻辑做个梳理,这样老项目就算成功升级了。
整个步骤看上去很繁琐,我们可以对这些步骤进行一些优化:
- 我们可以使用monorepo的方式对项目进行管理,monorepo简单来说就是可以把多个代码库的所有内容放到同一个库中,然后对不同项目的代码进行统一的管理,github上有很多开源的monorepo工具,比如yarn workspaces、lerna等。使用monorepo之后,很多项目可以并行开发,同步成本也变得很低,管理起来更加方便。
- 我们将项目与脚手架项目融合起来,这样子我们就不需要手动初始化ESLint + lint-staged + husky,只需要进行一次配置即可,这样我们就省去了这个步骤。
- 我们使用代码合并工具,比如git merge-tool,合并仓库代码可以变得更加容易,可以减少由于提交历史和逻辑的历史差异带来的困扰,只需要考虑代码逻辑和仓库逻辑即可。
当然,为了方便后续维护,我们可以写一篇文档记录整个迁移的过程,这样后面遇到类似需求的同学就可以直接参照文档完成迁移了。
经过了以上的一些努力,我们终于实现了老项目的升级,并且达到了原先设定的目标。
- 对代码质量进行了管理。
- 剥离了zepto,实现了打包工具升级。
- 老项目和新项目统一标准,规范版本管理,保证了一致代码质量。
当然,在整个升级的过程中,我们可能还会遇到其他的问题,这里不再做更多的阐述,老项目升级的目的就是要做到新老项目代码规范统一,更易于维护。