淘宝:使用Node.js的TypeScript多场景框架和方案实践

论坛 期权论坛 期权     
前端之巅   2019-6-29 21:30   2970   0


  作者 | 王莹,胡骁杰 编辑 | 王莹未来前端最大的问题是规模化编程和全栈带来的挑战,TypeScript 能够很好的应对这 2 个问题。在传统的 Web 框架、FaaS 框架或者其他微服务框架,基于 JavaScript 体系实施全栈模型的大型项目开发时往往造成代码复杂度过高,维护成本逐步增加的问题(没有类型系统)。同时在不同的场景下迁移代码、共享代码时也会碰到很多问题。
淘宝通过引入 TypeScript 和装饰器模型,通过在跨场景下引用相同的装饰器,但是不同实现逻辑,来解决不同场景下的各种需求。这种做法很好的做到架构解耦,并解决规模化编程问题,提高代码质量,对团队成长也有非常好的帮助。
淘宝从 2017 年之前就开始探索 TypeScript 的落地方式,随着时间的推移已经将新的模块和框架全部迁移到 TypeScript 体系,在 2019 年,TypeScript 应用已经遍地开花,提前完成了非常不错的布局。
GMTC 全球大前端技术大会 邀请到了来自 淘宝的前端技术专家陈仲寅老师,带来《使用 Node.js 的 TypeScript 多场景框架和方案实践》的相关分享,感兴趣的同学不要错过。下面是 GMTC 对于陈老师的采访:

  Q1:在两年前淘宝就对 TypeScript 的落地方式进行探索,请问当时是基于什么样的背景选择 TypeScript 呢?是被 TypeScript 的某些特性吸引了吗? 陈老师:淘宝最开始在 Node.js 中使用 TypeScript 的时间点我记得很清楚,是在 17 年上半年,但是那个时候我个人其实是投反对票的,很惭愧,主要原因就是需要编译,但是团队其他成员最终投票促使完成了这件事情,在我硬着头皮使用了半年之后,就变成了 ”真香“的局面。当初使用的主要原因就是类型系统,在大型协作项目中,没有类型系统,没有定义是一件非常可怕的事情。我们每个人把交接部分的 interface 定义完整,然后拿着这份定义进行分头开发,最后把代码汇聚到一起,特别的高效。

  Q2:之后,阿里基于 TypeScript 建立了完整的框架体系,与传统的 JavaScript 体系框架相比,前者的优势在哪里? 陈老师:其实到目前为止,阿里也不能算是建立了完整的 TS 框架体系,很多人还对 TypeScript 抱有怀疑态度,但是我相信随着时间的推移,慢慢的都会转变过来。
TS 的优势就像上面说的,最大的是类型系统,减少了很多低级错误,方便代码检查和衔接。二是可以通过定义接口,来让团队中的同学进行协作开发,剩下的还有一些点,我也会在本次分享中来进行说明。

  Q3:Midway 框架起初基于 Egg.js 开发,为什么后来又引入 TypeScript 呢? 陈老师:Egg 本身和 TS 并不冲突,只是框架本身对 TS 的支持力度有限,一方面是定义的缺失,另一方面 Egg 的过程式写法不是很容易写定义,而 Midway 是直接使用 TS 编写,同时默认都是类的写法,这也是我们开发 Midway 比较大的一个目的。

  Q4:之后,Midway 框架引入 IOC、实现解耦、可以自定义装饰器这些后端框架特性是因为什么原因?这些特性在引入的过程中遇到过什么技术痛点吗? 陈老师:最主要的目的是,淘宝的 Node.js 全栈应用比较多,前端需要写比较复杂的业务,简单的 Controller + Service 的组合满足不了这些场景,而我们很多同学都是既会写 Java 又会写 Node.js,自然会想到使用高级语言的语法来解决问题。碰到的技术问题本身并不太多,在初始阶段运行 demo 的时候核心的 IoC 就基本稳定了,反倒是后面结合 Egg 的时候问题比较多,我们一方面不是很想破坏 Egg 本身的结构(方便后续升级),又希望能增加语法糖,扩展我们自己的功能,着实费了不少精力(主要是在插件兼容方面)。

  Q5:为什么要对 Midway 框架做跨场景的设计? 陈老师:这纯属一个意外,是在后期提出自定义装饰器的时候灵光一闪想到的,本来只是个设想,做了 demo 之后发现完全可以实现,就朝着这个方向越走越远。

  Q6:淘宝已经将新的模块和框架全部迁移到 TypeScript 体系,为什么要迁移?迁移过程中有没有遇到一些问题?解决方案是什么? 陈老师:由于我们的框架是 TS 体系,如果配套模块不是 TS 体系会造成定义丢失,给用户带来困扰,另一方面我们也积极推进业务本身也使用 TS 书写(内部的版本是分 JS 和 TS 的),方面使用各种语法糖以及面向未来(比如 FaaS )的代码迁移。

  Q7:Serverless 的概念最近很火,这给您带来哪些技术上的思考? 陈:我们最近一直在做 Serverless 方面的投入,主要是 FaaS 和 BaaS 方面,集团也一直在尝试将应用迁移上去,Serverless 本身可以降低前端同学维护服务器的成本。 非常适合业务同学来实践和试错。另一方面,Serverless 也给架构同学带来了更多的挑战,原有的中间件,带状态的服务都需要重新思考,生态也需要重新打造,也算是一个不小的挑战。Node.js 本身在这个领域内又比 Java 更占优势,相信这也是 Node.js 工程师突破的下一个契机和方向。
在以上的采访中,陈老师简单的介绍了一下使用 Node.js 的 TypeScript 多场景框架和方案实践,相信大家也没有听过瘾,详细的技术细节和实现方式欢迎大家来大会现场与陈老师面对面交流。更多 GMTC2019 的精彩议题欢迎点击”阅读原文“查看详情,目前大会购票倒计时 5 天,想要买票的小伙伴抓紧啦,可以直接联系我们的 票务小姐姐:18514549229。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:90
帖子:18
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP