5年以前,我做过一个类似的决定,全情投入到 RubyOnRails 的怀抱。当时我说:
新手初入一个领域,最明智的做法就是融入到这个领域的一群聪明人之中。Rails 给了我这样的机会,让这些人可以为我引路,否则我必然会迷失于概念的海洋…
5年后的今天,meteor+react 也给了我相同的感觉,一群我最喜欢的高手,把自己的经验融入到一套框架,并且形成了最为热闹的社区。
首先, RubyOnRails 那么好,为什么要离开呢?这个我想引用 Wordpress 之父 Matt Mullenweg 2015年底说的一句话 :
JS is the future of the Web 。
RubyOnRails 有几个明显的问题:
对应的,Nodejs 没有历史负担,一切都可以选择最佳解决方案。当初选择 RubyOnRails ,就是因为它可以极大的提高个人开发者的单兵效率。我总觉的编程也是一种创造性劳动,你应该可以轻松的,独立的表达出自己的思想。而不是是像流水线工人那样工作。幸运的是 nodejs 领域工具多( npmjs.org 是目前世界上最大的软件仓库系统),可以自由选择由轻到重的各种技术栈,满足我自己项目的需求。
等等,Nodejs 不是负责后端的吗?怎么能和 JS 画等号呢?实际情况是这样,前端目前各种构建工具,框架,包括最流行的前端(对,前端)包管理框架 npm ,其实都是基于 nodejs 的。所以现在所谓学 JS ,其实基本等价于学 Nodejs 了。这个是我非常想澄清的一点。
nodejs 各种技术方案选择太多,无从下手怎么办?框架就是答案。
如果嫁给 nodejs 是既定,那么选择 meteor 和 react 这个组合其实也不是非常特立独行。到 github 上看一下 star 数量就一目了然。绝对数量上,react 对比老牌的前端神器 Jquery 和 Angular 还有不大的一点差距,但是增速上面比另两个快很多了。类似的,全栈框架 meteor 不管是绝对 star 数量还是增速都大大超越其他 nodejs 后端或全栈框架。
目前 JS 开发领域工具和方法论众多,meteor 其实是集合了一群绝顶高手,要把最优秀的开发经验融入到一套框架之中。那么这样一套最优方案,对于防止新手走错路,显然是非常有效果的。Meteor 不仅仅是一个优秀的框架,也是一伙活人,随时会把业界最新的 JS 工具和实践融入到 meteor 框架之中。
跟 Rails 相比,meteor 自带的功能少得很。 但是你可以安装 meteor 的包来进行扩展。 Meteor 自己的包仓库,目前已经有近一万个包了。另外,meteor 背靠整个 npm 生态,安装普通的 npm 包进 meteor 也是非常方便的。
前面吐槽了 Rails 等传统框架不适合来开发实时性强的应用,那么 meteor 的优势体现在哪里呢?应该说体现在很多方面,但是这里我想强调一点:全栈随动( Full Stack Ractivity )
基本的意思就是说,整个应用的数据已经成了”一根筋“:
没有写过界面的人很难理解,这两个“自动”,让复杂前端界面的开发省去了多少麻烦。
React 是写前端界面的最新最高效的方式,由 facebook 推出,并且在开源社区有广泛的支持。React 解决了前端开发的诸多痛点:例如,界面组件化问题,以及 Jquery 写多了变成一团乱麻问题等等。这些问题都是在 React 出现之前,我自己就在用各种瘸腿的方法去试图解决但是解决的很差的问题,所以 React 一出现,我就像见到了宝贝一样。
React 只是用来写界面的,要配合其他工具才能真正写出一个 Web 应用了。Facebook 官方的做法是:React 配合 Redux 来做前端,然后后端配合其他的技术来解决。Redux 很强大,但是也非常复杂。Meteor 官方给出了另一套解决方案,就是 React 配合 meteor 来使用,对初学者更加友好,而且也有了后端,这个也是 Peter 推荐的方案。
另外,利用 http://cordova.apache.org/ , meteor 写成的 Web 应用,可以直接编译成 ios 或者 andriod 的应用。另外一个方案就是使用 react-native ) ,也可以让我们用 JS 就写成手机 App 。
这样,一套手艺( HTML5 ),多平台通吃,对于人力资源紧张的小团队是有巨大吸引力的。
Meteor 不仅强大,而且简单,meteor 官方的人演讲的时候就说,如果你用 meteor 开发的是你人生第一个 Web 应用,我们觉得 meteor 也是适合的。同时,人们对 界面的酷炫程度要求越来越高,有了 React ,复杂界面的开发变得不再复杂。