专访 Scripted——由 VMware 发布的、用于本地开发的 JavaScript 编辑器

  • Abel Avram
  • 方盛

2013 年 1 月 3 日

话题: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 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

JavaScript语言 & 开发