06月06, 2016

开发和维护 ThinkJS 是一种什么样的体验?

受邀于在知乎上回答维护一个大型开源项目是怎样的体验,博客里做个备份。

先介绍下项目:ThinkJS,一个借助 Babel 编译,可以直接用 ES2015+ 特性开发 Node.js 项目的框架,为企业级 Node.js 项目开发提供巨大的便利。目前 GitHub 上 star 数为 1620,issue + pr 有 300 多,有 1700+ 单元测试用例和非常完善的中英文文档,已经有不少公司在使用。

项目事迹

提到 ThinkJS,可能有些人第一想到是不是和国内的 PHP 框架 ThinkPHP 有一些关系,你没猜错,刚开始 ThinkJS 就是借鉴 ThinkPHP 来开发的。这个想法是在 2013 年下半年的时候开始有的,那个时候 Node.js 框架主要还是 Express,但用 Callback 处理异步的方式非常让人头疼,而有另一种比较好的方案就是用 Promise,所以慢慢就有了借鉴 ThinkPHP,使用 Promise 机制开发一个 Node.js 框架的想法。

借鉴 ThinkPHP 框架有几个原因: 1:ThinkPHP 代码比较简单,借鉴成本较低。 2:ThinkPHP 在国内有一定的用户量,如果这部分用户想用 Node.js 开发项目肯定是希望有个和 ThinkPHP 相似的框架。 3:最重要的一点是,ThinkPHP 在国内持续维护了 7 年多的时间,这在国内是一个非常不容易的事情。我也是希望借助这个激励自己要把 ThinkJS 持续维护下去。

我们在 2014.09.22 发布了 ThinkJS 1.0 版本,在公司内部有较多的项目在使用,外部慢慢的也有一些人在使用。

随着越来越复杂的项目使用 ThinkJS,Promise 也暴露了一些弊端,如:不能很好的跳过一些中间环节和数据传递。随着 ES2015 规范的发布和 React 的火爆,虽然运行环境还不支持这些新的特性,但这里借助 Babel 编译可以提前使用这些新的特性。而对于异步处理方式有了更好的方式,Generator Function 或者 Async Function。

所以我们在 2015.03 完成了全新版本的设计,定位为可以在项目里直接使用 Es2015+ 特性开发,框架会进行自动编译和自动更新,大大方便 Node.js 项目的开发,同时优化 1.0 里不合理的架构和设计,脱离对 ThinkPHP 的依赖。于是我们在 2015.10.30 发布了 2.0 版本,这天也是 Babel 发布 6.0 的日子。

随着 2.0 的发布,ThinkJS 成为世界上第一个全面支持使用 ES2015+ 特性开发 Node.js 项目的框架,后续的版本又支持了 TypeScript,断点调试等功能。

和其他框架的对比

很多人一看到 ThinkJS,就觉得是个大而全的框架,估计就直接放弃了,他们更喜欢 Koa 这种小而美的框架。

其实 ThinkJS 并不是大而全,只是封装了一些常用的功能,为企业级开发而定制的。提供的 Middleware 和 Adapter 机制更适合企业级项目开发。

Koa 虽然本身很小,但实际开发项目时,需要自己寻找各种中间件,这些中间件质量层次不齐,有些功能模块接口不统一,这给团队开发带来很大的麻烦。同时团队还要基于 Koa 做自己做项目规范,经过时间才能积累最佳实践。而 ThinkJS 将这些直接提供了,省去了很多时间。

一些好玩的事情

自从有了英文文档后,慢慢的有些老外也在用 ThinkJS。发现这些老外真是积极,他们会主动给一些 awesome-* 项目发 pr,让其添加 ThinkJS,也会主动修改文档中的一些拼写错误,然后发 pr。

更好玩的是有个老外 EunseokEom 觉得 ThinkJS 的官网不太好看,所以他自己设计了个,并且给实现了,https://github.com/75team/www.thinkjs.org/pull/60,虽然这个网站我们觉得也不是很好看,最后没有合并,但老外这种贡献的精神真的非常赞。不过这也让我们有了优化官网的想法。

本文链接:http://welefen.com/post/experience-of-thinkjs.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。