OpenSumi 是用于快速搭建本地和云端 IDE 的框架。
OpenSumi 框架旨在解决阿里经济体内部 IDE 产品研发的重复建设问题,满足 IDE 在更多垂直场景的定制能力,同时实现 Web 与本地客户端共用底层,让 IDE 研发从早期的 “刀耕火种” 时代向 “机器化大生产” 时代迈进。
整体架构
为了保证框架可以同时在 Web
和 Electron
环境下运行,OpenSumi 采用了一套前后端分离、通过一层抽象的通信层进行相互调用的项目结构。
在 Web
上,我们使用 WebSocket 来作为通信的实现。
在 Electron
上,我们则是 IPC
通信。
每一个通信的连接对应前后端一个独立的 DI (Dependence Inject) 容器,所以 OpenSumi 的后端实现是无状态的,不同连接之间是严格隔离的。
在 OpenSumi 内主要有三个核心进程:
- 插件进程 (Extension Process)
- 后端进程 (Node Process)
- 前端进程 (Browser Process)
为了保证插件的问题不会影响 IDE 的性能表现,插件能力上 OpenSumi 采用了跟 VS Code
类似的方案,通过独立的插件进程去启动插件,插件进程再通过后端进程与前端进程进行通信。
OpenSumi 的不同能力实现被拆分到了不同的模块内,这些模块通过 贡献点机制 (Contribution Point)、DI 机制 (Dependence Inject) 互相之间有较弱的依赖关系,对于一些比较核心的基础模块,如主题服务、布局服务等,也会被其他模块直接依赖。
因此,在集成开发过程中需要保证一些模块的引入顺序。
整体启动的生命周期如下图所示: