Web IDE 开发笔记
-
Theia 架构解析
-
Lumino:桌面感窗口系统的前世今生
- Lumino 的 Widget 系统:从概念到源码入口
- Lumino 的 signaling 和 messaging:状态与生命周期的底噪
- Lumino 的布局系统:DockPanel / SplitPanel / TabBar 一条龙
- Lumino 的 command 系统:把行为从按钮里解放出来
- Lumino 的应用骨架:Application + 菜单 / 工具栏 / 右键菜单
- Lumino 的 virtualdom:轻量 VDOM、对比 React/Vue 以及如何结合使用
- Lumino 的 disposable 与组件生命周期:东西造出来,总要有人负责善后
- Lumino 的性能与优化:与 React 的对比思考
- Lumino 在视频编辑器等工具类应用中的可能性与想象
- Lumino 的工具与基础设施模块:与 Lodash 的对比杂谈
- Monaco:前世今生与在 Theia 中的角色
-
InversifyJS:Theia 架构的依赖注入基石
- InversifyJS:依赖注入的前世今生(从工厂模式到 Theia)
- 在项目中引入 InversifyJS:配置与依赖
- InversifyJS 基础示例:从传统依赖到依赖注入
- InversifyJS:服务标识符与接口绑定(Symbol 与接口)
- 用类本身作为服务标识符:简化绑定的另一种方式
- InversifyJS:作用域与生命周期(Singleton / Transient 等)
- InversifyJS:多种绑定方式(to / toSelf / toConstantValue / toDynamicValue / toFactory / toProvider)
- InversifyJS:高级绑定(命名绑定、标签绑定、多重注入、可选注入)
- InversifyJS:ContainerModule 与模块化 DI(对标 Theia 前后端模块)
- InversifyJS:懒注入与循环依赖(lazyInject 的利与弊)
- InversifyJS:测试中的容器用法(测试容器与 rebind)
- InversifyJS 与 Theia:从 index.js 看前端启动与模块装配
- InversifyJS 与 Theia:概念对照表(从 DI 到扩展点)
- LSP:语言服务器协议的前世今生与在 Theia 中的角色
- AST:语法树到底是什么,以及和日常开发有什么关系
-
Lumino:桌面感窗口系统的前世今生
-
IDE 相关开发
- IDE 中的 CSS 常见应用:布局、主题与交互细节
- AI IDE 中的 CSS 玩法:打字机效果、主动滚动与状态提示
- VS Code 插件体系总览:Extension Host、激活事件与贡献点
- Theia 插件体系总览:前后端扩展、扩展点与 DI 容器
- VS Code 与 Theia 插件模型对比:扩展点、架构与兼容性
- VS Code 插件:命令、菜单与快捷键——从 contributes 到代码注册
- Theia 扩展:命令、菜单与快捷键——基于 Command 与 Keybinding 扩展点
- VS Code 插件:自定义视图——TreeView 与 Webview 典型场景
- Theia 扩展:自定义视图——用 Lumino 与 ViewContribution 挂一个侧边栏面板
- Theia:如何托管 VS Code 插件——plugin-ext-vscode 兼容层的架构与调用路径
为什么要写这个系列的笔记
这个系列文章作为我 Web IDE 的开发心得笔记,至于为什么要做一款纯在线的 IDE 要从以下这么几点讲起。
IDE 对于程序开发的作用
写程序无非就是以人类能理解的文本形式来有规律有目的控制计算机进行计算。而当在开发规模非常小时,比如当写一个简单功能的 bash 脚本时,直接对文本文件进行编辑,直接使用 echo 或者 Vim 都可以非常简单的解决问题,当然如果 Vim 经过一些改造,某种程度上其实也是一个 IDE。但是如果程序规模一旦大了之后,就会遇到以下的一些需求。
- 代码缩进
- 语法检查
- 代码分包
- 代码高亮
- 语法提示
这些需求的满足对于写代码的人来说非常有帮助,开发者可以更多的将自己的注意力集中于实现当前的功能,而不是繁杂的语法或者其他的编程细节。在今天写代码更多的是为了实现功能,而不是为了去炫技,抱着一本魔法辞典去放魔法的时代已经过去了,更多的降低写代码的门槛以使得更多的更快的将学习者变成开发者是一个不可避免的大趋势,为了达成以上的愿景 IDE 就此诞生。
如今市面上的 IDE
在我观测的范围内如今做的比较好的桌面级 IDE 为 VS Code 以及 JetBrain 家的一些列针对各种语言特化的 IDE。 VS Code 作为免费的 IDE,其极佳的扩展性以及丰富的扩展生态被广泛的在各个领域使用。JetBrain 作为一款付费 IDE 却仍然有强大的竞争力,其核心在于专注于对各种语言的特化,使得一种开发语言就有一款专门的 IDE 来对其中的开发痛点进行补足,相比起 VS Code 来更强的代码补全,代码高亮,以及更友好的开发环境配置,唯一的可能的不足就是收费?
以上的 VS Code 和 JetBrain 作为桌面级别的IDE,用于专业开发者的开发自是极佳的,但是如果给一些刚入门的新手可能还是不够适合的,VS Code 在需要一些比较麻烦的环境配置,而且这个环节还是挺劝退的,而 JetBrain 作为一个付费 IDE 对于学习者也天然的会有畏惧心理。
而如今市面上又出现了很多在线版本的 IDE,比如老牌 IDE 厂家 eclipse 的开源在线IDE theia,还有 code-server 等等。不同于传统的桌面级 IDE,这些网页版的 IDE 做出了一些与众不同的改变,它们将 IDE 脱离桌面环境运算可以放到服务器或者容器内,基于浏览器的 V8 引擎来对 IDE画面进行渲染,当然值得一提的是现在市面上出现了这么多的网页版 IDE 很大程度上归功于微软的 VS Code 项目,因为它本质上也是一个基于 chromium 浏览器的项目,你只要打开 Help>Toggle Devloper Tools 就能发现 chrome 的 develpoer tools。微软在 github 上有大量的 IDE 相关的开源项目,比如 monaco-editor,这是 VS Code 以及一众在线 IDE 的编辑器组件,其作为一个网页端的文本编辑器其功能已经非常完善了,所以很多 IDE 项目其实可以很大程度上避免重复的工作,尤其是文本编辑器这种需要针对 AST 来做一些彩色渲染高亮等的重复工作。
我为什么要写一些 IDE 相关的内容
对于大多数人来说,更喜欢一些拿来即用的工具,对于工具好用就行无关其本质以及原理。但对于我个人来说,我会更好奇于事物本身的原理以及机制,拆解一些已经整合好的东西能给我带来一些满足感,或许我有一些结构主义的倾向