专访Scripted——由VMware发布的、用于本地开发的JavaScript编辑器
Scripted是一款新的基于浏览器的JavaScript代码编辑器,它工作于本地,并且由Node.js Web服务器提供内容服务。该编辑器由VMware基于 Eclipse Orion的编辑器组件开发。Scripted是专为这样的开发者而创建——他们在本地开发时,希望使用的是简单、轻量级的工具,而不是非常完整的IDE工具。
VMware公司SpringSource部门的主管工程师Andy Clement列举了 Scripted的主要特性:
- 启动快速,轻量级。
- 支持JavaScript、HTML 和CSS的语法高亮。
- 错误与警告:
- 集成了JSLint,可以标记JavaScript代码中的错误/警告。
- AMD和CommonJS模块解析:有一个基本的解析策略,未解析的引用将被标记为错误。
- 内容辅助:
- 针对HTML和CSS的基本内容辅助功能。
- 针对JavaScript,内容辅助功能是由一个类型推导引擎驱动的,该引擎能够感知AMD/CommonJS模块依赖,而且还使用了JSDoc注释来帮助理解代码。
- 悬停:鼠标悬停在JavaScript标示符上时,会显示推断出的类型签名。
- 导航:在标识符(该推断已被识别)上按F8,编辑器将跳转到该标示符的声明处。该功能在模块标识符上也有效(比如在define()子句中)。
- 格式化:集成了JSbeautify。
- 侧面板:在主编辑器的旁边可以打开一个侧面板——目前该侧面板主要用来承载副编辑器。
- 外部命令的按键绑定:在编辑器中进行按键绑定以后,可以调用外部命令(如less和mvn等)。
在不久的将来,该团队打算改进代码辅助和导航功能,以便提供更多的操作面板来承载不同内容,如文档、搜索结果和代码预览等,还准备提供一个简单的插件系统,并支持使用Chrome Development Tools和 Node Inspector进行调试。他们也正在考虑支持类似的语言,诸如CoffeeScript和TypeScript等。
InfoQ采访了Clement,以便更多地了解Scripted以及该团队下一步的计划。
InfoQ:Scripted是基于Eclipse Orion开发的。为什么要从Orion分离出一个单独的项目呢?
我们曾经很中意Orion编辑器组件——Scripted客户端就是以它为基础的。但Orion主要是为远程托管的工作空间或项目而设计的,本地服务模式只是一个可选项。我们发现远程项目并没有吸引所有的开发者,而且我们起初希望围绕本地服务模式设计点东西。在这种情况下,我们觉得Orion的服务器有点过于重量级,而且很多属性我们当时是用不到的,比如多用户支持和Git集成。通过Scripted的客户端/服务器架构,我们具有一定的灵活性,以便可以在将来的某个时刻将本地服务器转移到远程服务器上。
InfoQ:Scripted 和 Orion有哪些主要区别?乍一看,我发现Scripted有个副编辑器,而且导航也不相同。还有什么其他重要的改变吗?
Orion是个可扩展的工具平台。我们并不需要那样的可扩展性,相反我们提供的是一系列更为固定的组件集。Scripted旨在成为单页面风格的应用程序,并为开发者提供与vi、textmate或sublime等工具类似的使用体验。在使用像Git等系统工作时,Orion提供了专门的UI;而Scripted也认识到了这一点,对某些任务来说,用户已经有一套熟悉的工具,我们不希望他们为同样的事情再学习另一套UI。我们一直致力于代码理解(code comprehension)这一关键特性,并将持续改进。我们在构建能够理解JavaScript代码的类库上投入了很多精力,希望可以提供更加优秀的内容辅助功能,并且在处理代码时提供更好的导航体验。在开发者编写代码时,不管他们使用的是AMD还是CommonJS模块系统,Sripted都能检测出来。如果模块引用无法识别,Sripted会在编辑器中标记错误;如果从一个模块访问了另一个模块,它会根据对模块结构的理解提供适当的内容提示。它还能解析各种有效的JSDoc,以便更好地理解参数和返回值。
你提到了侧面板,目前它用来承载副编辑器。在接下来的几个版本中,我们打算在侧面板上多花些心思。可以把它当成这样一个地方,当要在主编辑器中完成某项任务时,任何辅助内容都可以出现在这里。刚开始的时候它被用于副编辑器,不过我们计划在这里支持文档、搜索结果等面板。最理想的情况下,我们希望它不仅可以包含用户所要求的各种内容,而且还可以预先提供一些用户没有要求但Scripted认为会用到的内容。也许会有这样一个面板,它可以跟踪主编辑器光标的位置,并且不断更新,如果光标处是任何调用代码的话,该面板可以将被调用内容显示出来(类似于最近在light table中看到的某些功能)。重要的是,我们希望这个侧面板包含的是各种相关的内容——Scripted将会努力积极的保证这一点。
InfoQ:Orion在服务端使用的是Jetty。为什么你们却转移到Node.js了呢?
我们希望服务端尽量是轻量级的,而Orion服务端,如你所说使用的是Jetty,它跟我们的需求比起来要更复杂一些。我们没有必要使用Orion服务器,一旦做出这个决定,我们的选择就非常多了。在以前的那些工具项目中,我们常常遇到的问题就是虽然我们开发了这些工具,但是我们自己却并没有很积极的使用它们,而是简单地将它们交付给用户。我们希望通过Scripted改变这种状况,在日常的开发工作中我们就积极的使用它。这种情况自然而然地引导我们除了客户端,在服务端也使用JavaScript。Node.js也就成为后端技术的不二之选。迄今为止,运行得还不错。我们对CommonJS的支持工作基本上已经开发完了,因为我们需要它来简化服务端的开发工作。
InfoQ:Scripted是在本地运行的,这就意味着来自服务器的响应也更加快速,但是它是如何跟基于Web的代码库进行集成并和其它开发者合作的呢?
目前它还没有跟基于Web的代码库或者是“服务端的工作空间”进行集成,如果你愿意这么说的话。在我们的路线图中,我们希望可以远程部署服务器,当然,这并不是该项目的初衷。我们发现开发者们目前还不想放弃在远程工作空间上进行代码操作的习惯——但是未来这种情况可能会有所改变。
InfoQ:对于 Scripted的未来,你们有什么计划?
现在才刚刚起步。我们发布的第一个版本是0.2版,主要是用来收集用户的反馈。在接下来的几个版本上,我们主要的关注点仍然是围绕JavaScript的编辑体验:持续改进代码分析功能,提供更好的内容辅助功能。与此同时我们希望可以开始在侧面板上添加一些新的子面板,诸如搜索和文档。我们也开始准备将测试集成进来以提供更简单的方式来加载测试,查看测试输出,进一步我们还会探索将调试器也集成进来。
InfoQ: 关于VMware对Scripted的参与和计划,你有什么可以分享的吗?
Vmware一度曾经非常积极地参与过开发工具的开发工作,其中包括Spring工具套件和Groovy/Grails工具套件。相对于为IDE提供插件的传统方式,作为一种对替代方式的探索,VMware创建了Scripted。我们认识到有些开发者希望使用轻量级编辑器,但目前这往往意味着要放弃那些能够极大提高生产效率的常见IDE特性(如内容辅助和重构)。Scripted试图证明这并不是必须的。我还应该稍微提一下,Scripted团队正在和Orion团队进行积极的合作,并尽可能回馈Orion项目。
编者注:Scripted基于 Eclipse公共许可证1.0版开放源代码,可以 在GitHub下载。
查看英文原文: Interview on Scripted, A JavaScript Editor for Local Development from VMware
感谢 臧秀涛对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至 [email protected]。也欢迎大家通过新浪微博( @InfoQ)或者腾讯微博( @InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。