Zong
怀念暑假的美好时光

杭州的梅雨季节也过去了,迎来了炎热的夏天,每天通勤路上就和蒸桑拿一样,汗水滴滴的往下流,每当进入地铁、公交的时候,吹着凉爽的空调,那这真是通勤路上的一处阴凉。

感觉在哪里都离不开空调,早上起床听到窗外蝉(知了)叫声,深深的感受到了夏天的降临,时常会回想起暑假那惬意的时光,多么的美好,可惜已经没有了……

在炎热的夏天,吹着空调,躺在沙发上,看着电视,玩着电脑,吃着冰西瓜,喝着冰可乐,玩累了吃累了可以睡睡觉,这样的暑假生活已经没了

毕竟自己已经不再是学生,需要赚钱养活自己,所以不管是夏天或是寒冷的冬天,打住。

话说我什么时候才能摇到车牌呀?我都已经参加了 53 次了! 虽然中间漏了几次,或许在这样的季节或是天气恶劣的情况,我想在车里感受似曾相识的暑假时光 :)

React 源码阅读计划

截止 7 月底,阅读源码任重而道远。 对 React Fiber 的认识还是比较浅薄,另一个比较难理解的就是 React Fiber Scheduler 和 React Fiber Reconciler ,目前阅读进度在 ReactFiberLazyComponent.jsReactFiberClassComponent.js 他们都在 ReactFiberBeginWork.js 下,在此之前为了更好的理解源码,重新又去看了一遍 React 官网文档,学习了新的 Hook API (React Today and Tomorrow and 90% Cleaner React With Hooks),虽然阅读源码时有部分跳过。目前来说,对于源码中时间方面的理解还是很浅层次的,组件逻辑就比较清晰,毕竟现在都是用 React 在写代码,希望通过这次阅读体验让我对抽象的理解更上一层,加油。

中心化之路

这个月在实践中心化的路上,考虑到公司前端后台项目业务组件使用频繁,并且具有一定的通用性,同时之前我已经在公司内部搭建了私有 NPM 服务,那么中心化之路迫在眉睫。在此,我为公司开始编写一套后台通用性组件以及工具包。通用性组件其实很好理解,就是结合我公司业务需求抽象出来的通用性较强的组件,配合我编写的 API 文档进行使用,工具包也是顾名思义,这里就不多做解释了。

那么来说说这个过程中遇到了一些问题,以及考虑如何解决。

在提供组件和工具包时,先暂时是在我的项目中优先使用,覆盖我的项目中所有存在的情况以及我设想到的可能出现的情况进行编写。编写代码其实是简单的事情,难就难在设计 props 和 API ,我得考虑组件未来的扩展性、迭代问题,其实这就是命名问题,这是一个深远的问题。关于命名网上也可以搜一堆建议出来,按照合理性采用即可。

OK ,在上面的问题得到解决后,问题接踵而至,比如说组员们用的工具也不同,yarn npm 各式各样,因为 NPM 服务搭建在内网,那台服务器不怎么行,你懂得吧,用 npm 速度特别慢,经常超时。因为我用的是 yarn 就会好点,但是不能让每一位同学都装 yarn 吧,这是一个问题,也没有解决,所以让每一位同学都装了 yarn 哈哈。但是这一问题衍生出来的就是,这个工具是否应该也需要统一,毕竟如果一个项目经过两个同学之手,仓库内可能会同时出现 yarn.lock 和 package-lock.json ,会很奇怪吧,这是我的猜想。

再来说说维护问题,如果说我在使用到该组件或者工具中遇到了 BUG ,那么我该怎么办?假设我们已经发现了 BUG 的位置并知道如何修复,我们需要先修复代码或提 PR 给我进行合并,然后提交代码或需要更新文档,再发版,发版完后,项目统一更新至最新版本。很繁琐对吧,这就是中心化的问题之一,去中心化就会带来不错的效果,但是带来的问题就是项目大大大,但是结合我公司目前的状况,我认为中心化任然是一个优于去中心化的选择。

问题又来了,我该如何通知其他项目的同学去更新这个库呢?很难吧,就像你用 NPM 的库一样,只有你发现问题时,去查看他的 issues 才会发现,需要更新版本,并且你在更新版本的同时可能会带来不必要的问题,比如中间产生了破坏性更新?这些都是你不知道的,暗藏在那边的坑,虽然说我们都是在坑里长大的,但是这也太坑了吧。暂时的,也没想到什么很好的方案,或许写出更好的文档才是更好的选择吧。

文档的维护,真的好麻烦,都没有一键生成的工具吗?算了,我没找到。这个过程太漫长了,老老实实写吧。同时我还需要向同学们分享库的更新内容。

确实在这一路实践下来,成本还是有点的,但是效果也是值得的,统一抽离公共内容来提升同学们的开发体验也是很有价值的一件事情。

但是这些库在我公司内部发布后,并无法直接提供给大家使用,考虑到为了不带来不必要的麻烦,我们采用灰度升级,只在新的代码中使用到,这又需要一个培训的过程,就像是项目交接,毕竟工具生产出来,不是一上手就会用的,所以我编写了一套代码演变的过程,告诉同学这套工具是用来解决什么问题痛点,使用了她后会带来多少便利,我相信这一切都是值得的。

目前我公司库内暂时还没写单侧,仅做代码检查,考虑到后续要交给其他同学维护,我也先尝试了 Git Hook husky 来帮助同学检查代码,在每次提交前都会检查代码,若不通过则无法进行提交。这是我目前为后面考虑的。