业务开发需要 webIDE,经技术调研,最终选定了 eclipse Theia。eclipse Theia 的文献不多,更无官方中文文档,在阅读中决定将其翻译成文。
本节对 Theia 的总体架构进行说明
Theia 可以是一个桌面应用,也可以在浏览器和远程服务中运行。为了用同一套代码,支持桌面应用和webIDE,Theia 运行在两个独立的进程中。这个进程分别被称为前端和后端,它们通过WebSockets上的JSON-RPC消息或HTTP上的REST api进行通信。在桌面应用中,后端和前端都在本地运行,而在远程上下文中后端将在远程主机上运行。
前端和后端流程都有它们的依赖注入容器,可以贡献扩展。
前端进程代表客户端并且担任呈现UI的职责。在浏览器中,它简单的在渲染循环中运行,而在Electron中,它在 Electron 的窗口中运行,Electron 窗口是一个基本的带有附加 Electron和Node.js api的浏览器。而任何前端代码都可以假设浏览器是一个平台,而不用关联 Node.js。
后端进程运行在Node.js上。我们使用express作为HTTP服务器。它可能不需要使用任何依赖浏览器作为平台的代码(DOM api)。 后端应用程序的启动将首先加载所有贡献扩展的DI模块,然后获得BackendApplication的实例并在其上调用start(portNumber)。默认情况下,后台的express服务器也为前台提供代码。
在扩展程序的顶层文件夹中,我们还有一个附加的文件夹层,可以按平台分开:
common文件夹包含不依赖于任何运行时的代码。
浏览器文件夹包含要求使用现代浏览器作为平台(DOM API)的代码。
电子浏览器文件夹包含需要DOM API以及Electron渲染器过程特定的API的前端代码。
节点文件夹包含(后端)代码,需要Node.js作为平台。
node-electron文件夹包含特定于Electron的(后端)代码。
要了解Theia架构的高层概述,请参阅这个文档:
用JS实现的多语言IDE -范围和架构