作为全球最大的社交网站,Facebook与“开源”关系密切。 其开源项目负责人James Pearce曾公开表示 ,Facebook不仅起源于开源平台,也一直致力于建设一个完整的开源“栈”环境。 仅2014年,Facebook就设立了107项开源项目 ,使其总的开源项目超过200个。通过开源项目的方式,Facebook创建良好的生态环境,吸引了外界大量的优秀开发者为其工作。近日, Facebook 又 正式开源了Nuclide项目 。
其实,在相继开源 Hack 、 HHVM 和 React Native 后,Facebook就开始考虑Nuclide项目的开源工作。作为基于文档编辑器Atom的软件包库,Nuclide提供了类似IDE的功能,主要用于简化原生移动应用的开发。在项目启动之初,Facebook团队就试图寻找一个支持可再开发、开源的编辑器作为起点。GitHub去年开源的 Atom 在线文本编辑器正好满足了该需求。Atom利用当前流行的web技术进行开发,允许用户使用自己的React或者ES7。它提供了一个强大的原生shell,能够很好的集成移动平台编译器或者开发工具。而且,Atom针对多个语言都拥有完善的社区生态系统。最后,其丰富、可扩展的API支持用户快速开发Nuclide定制的功能。因此,Facebook最终选择了Atom作为Nuclide项目的基础。
那么,究竟什么是Nuclide呢?Nuclide就是一套基于Atom的软件包库,其 代码托管在GitHub上 。由于没有复制Atom编辑器的核心代码,当前初始版本的Nuclide可以安装在标准的Atom版本上,并支持用户继续使用除Nuclide外的其他社区软件包。Nuclide的主要功能如下:
支持远程开发
在Facebook,网页和后端工程师都会在远程数据中心的服务器上进行工作。Nuclide支持用户通过SSH连接到服务器上的轻量级节点daemon上,使得远程文件编辑和语法/类型检查成为可能。当然,这对于虚拟机同样适用,用户可以在HHVM上进行本地开发。
支持Hack编程语言
Hack的代码库是Facebook最大的代码库之一。从一开始,Nuclide项目就考虑要支持Hack语言,包括了语法高亮、类型检查、自动完成以及click-to-symbol特性等。
支持Flow JavaScript类型检查器
对于本地和远程的JavaScript开发,Flow引入了类型完整性和针对React组件及应用程序的快速反映能力。正如对Hack的支持,Nuclide支持@flow注释文件的特定Flow装饰和编辑器特性。
支持Mercurial分布式版本控制系统
Facebook目前采用Mercurial作为主要的源代码控制平台。因此Nuclide需要支持Mercurial。对于本地和远程开发,Nuclide支持文件树中高亮的修改、书签的设定以及只读的diff浏览器。
支持一步到位的搜索
Nuclide包括了统一的搜索工具包,支持在一个大的多语言代码库中高效而迅速的寻找文件和符号。
Facebook的软件工程师Michael Bolin表示 ,Facebook当前发布的软件包将仅仅是一个起点。未来,Facebook将会和社区开发人员合作进行包的迭代优化工作。此外,Facebook还有更大宏达的计划——统一的跨平台开发者体验。支持iOS、React以及React Native都是未来要实现的功能。而且,对于服务器和移动客户端都十分重要的调试功能也是未来要添加的功能。Michael表示,正如Buck和Infer项目一样,Nuclide项目未来将会在功
感谢徐川对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 )。