<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>wewoor (Ziv)</title>
    <link>https://ruby-china.org/wewoor</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>我们开源了一个轻量的 Web IDE UI 框架</title>
      <description>&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202112/21/91968/1xtKNyHkgz.png!large" title="" alt="logo@1x.png"&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;一个轻量的 Web IDE UI 框架 
Github: &lt;a href="https://github.com/DTStack/molecule" rel="nofollow" target="_blank"&gt;https://github.com/DTStack/molecule&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="简介"&gt;简介&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/DTStack/molecule" rel="nofollow" target="_blank" title=""&gt;Molecule&lt;/a&gt; 是一个受 &lt;a href="https://github.com/microsoft/vscode" rel="nofollow" target="_blank" title=""&gt;VS Code&lt;/a&gt; 启发，使用 &lt;a href="https://reactjs.org/" rel="nofollow" target="_blank" title=""&gt;React.js&lt;/a&gt; 构建的 &lt;strong&gt;Web IDE UI&lt;/strong&gt; 框架。通过一种类似 VS Code 扩展机制（Extension），可快速、轻松搭建一个高度抽象的 &lt;strong&gt;Web IDE UI&lt;/strong&gt; 系统。同时基于 Monaco Editor，内置集成了 QuickAccess 和 Keybinding 等功能，并提供了简单的 API 以供使用。&lt;/p&gt;

&lt;p&gt;得益于&lt;strong&gt;扩展机制&lt;/strong&gt;和 &lt;strong&gt;React 组件化&lt;/strong&gt;技术，Molecule 可以针对例如 &lt;strong&gt;Workbench UI,&lt;/strong&gt; &lt;strong&gt;ColorTheme&lt;/strong&gt; 、&lt;strong&gt;自定义热键&lt;/strong&gt;、&lt;strong&gt;快捷访问&lt;/strong&gt;等功能进行自定义扩展。另外，开发者可将&lt;strong&gt;业务代码&lt;/strong&gt;和 IDE UI 架构&lt;strong&gt;解耦&lt;/strong&gt;，在保持业务高速迭代的同时，&lt;strong&gt;产品交互体验&lt;/strong&gt;依然保持良好的&lt;strong&gt;可持续进化能力。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202112/21/91968/YKyy6C3qRM.jpeg!large" title="" alt="workbench.png"&gt;&lt;/p&gt;
&lt;h2 id="动机"&gt;动机&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.dtstack.com/dtinsight/" rel="nofollow" target="_blank" title=""&gt;数栈（DTInsight）&lt;/a&gt; 中例如&lt;strong&gt;离线、实时任务开发，算法开发&lt;/strong&gt;等产品，它们的直接使用人员大部分都是&lt;strong&gt;开发者，&lt;/strong&gt;需要在 Web 上完成&lt;strong&gt;代码编写，调试&lt;/strong&gt;等工作。所以，我们也希望给开发人员创造一个良好的在线 IDE 开发体验。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202112/21/91968/p1KmypQyNi.jpeg!large" title="" alt="ide-v3.png"&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;早期的&lt;/em&gt;数栈开发平台&lt;/p&gt;

&lt;p&gt;上图中的 RD-OS 是我们数栈开发平台早期的版本，当时产品功能本身比较简单。前端在初期的实现上，基于 React + Ant Design + Codemirror 来搭建的整个 IDE UI 界面。另外，由于当时我们多个产品都有这个 Workbench 的场景，我们还抽象了一个简单且单纯 的 IDE Workbench UI 的 React 组件，以供其他产品复用。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202112/21/91968/LGdacwug0s.jpeg!large" title="" alt="ide-v4.png"&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;当前的 Web IDE 版本&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;随着业务发展，产品不断的迭代，整个页面的功能也变得十分&lt;strong&gt;密集和复杂。&lt;/strong&gt;产品布局、视觉、交互等一直在更新和变化，上图已经是我们最新的版本设计。然而，在面对这些新的&lt;strong&gt;交互、视觉&lt;/strong&gt;上的诉求时，早期&lt;strong&gt;简单堆叠&lt;/strong&gt;的技术架构就会显得有些捉襟见肘了。设计师新出的方案，由于&lt;strong&gt;改造成本&lt;/strong&gt;很高，比较难以实施。&lt;/p&gt;

&lt;p&gt;大约 2019 年左右，团队和产品交流了市面上做的比较好的 Web IDE 产品，如 &lt;a href="https://github.com/c9" rel="nofollow" target="_blank" title=""&gt;Cloud9 IDE&lt;/a&gt;、&lt;a href="https://github.com/microsoft/vscode" rel="nofollow" target="_blank" title=""&gt;VS Code&lt;/a&gt;、&lt;a href="https://github.com/eclipse-theia/theia" rel="nofollow" target="_blank" title=""&gt;Eclipse Theia&lt;/a&gt; 等。这些产品都有非常好的 UI 抽象，扩展性很好，定制主题等功能也比较方便。但是这些产品功能比较完整的 IDE，应用到我们产品，就显得有点重，而且对团队技术挑战较大，最重要的是技术&lt;strong&gt;迁移成本&lt;/strong&gt;也比较高，自定义 UI 也不够灵活。&lt;/p&gt;

&lt;p&gt;基于这些问题的考虑，团队试图寻找出一种平衡方案。我们希望这个方案有很好的 &lt;strong&gt;UI 抽象便于新增功能、UI 可&lt;/strong&gt;自定义、定制 ColorTheme 简单、React 项目无缝衔接，让产品交互有比较方便的持续进化能力。在对 VS Code 源码研究了一番之后，我们便萌生了 Molecule 这个项目的想法。&lt;/p&gt;
&lt;h2 id="核心功能"&gt;核心功能&lt;/h2&gt;
&lt;p&gt;我们参考了 VS Code 的设计，对 UI 抽象、编辑器、颜色主题等等重新进行了梳理，Molecule 目前的核心功能如下：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;内置 React 版本的 Visual Studio Code&amp;nbsp;&lt;strong&gt;Workbench&lt;/strong&gt;&amp;nbsp;UI&lt;/li&gt;
&lt;li&gt;基本兼容 Visual Studio Code 的&amp;nbsp;&lt;strong&gt;ColorTheme&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;支持使用 React 组件自定义&amp;nbsp;&lt;strong&gt;Workbench&lt;/strong&gt;&amp;nbsp;UI 样式&lt;/li&gt;
&lt;li&gt;内置 Monaco Editor&amp;nbsp;&lt;strong&gt;Command Palette&lt;/strong&gt;、&lt;strong&gt;Keybinding&lt;/strong&gt;等模块，并支持扩展&lt;/li&gt;
&lt;li&gt;支持&amp;nbsp;&lt;strong&gt;i18n&lt;/strong&gt;，内置简体中文、English 等两种语言&lt;/li&gt;
&lt;li&gt;内置一个简单的&amp;nbsp;&lt;strong&gt;Settings&lt;/strong&gt;&amp;nbsp;模块，支持在线编辑修改以及扩展&lt;/li&gt;
&lt;li&gt;内置默认的&amp;nbsp;&lt;strong&gt;Explorer&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;Search&lt;/strong&gt;&amp;nbsp;等组件，并支持扩展&lt;/li&gt;
&lt;li&gt;Typescript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202112/21/91968/iFzp88LAHh.jpeg!large" title="" alt="Workbench Parts"&gt;&lt;/p&gt;

&lt;p&gt;上图是重新抽象的 Workbench UI。基于一个简单的扩展（Extension），如 &lt;strong&gt;Workbench&lt;/strong&gt;、&lt;strong&gt;ColorTheme&lt;/strong&gt;、&lt;strong&gt;QuickAccess&lt;/strong&gt;、&lt;strong&gt;Keybinding&lt;/strong&gt;、&lt;strong&gt;i18n&lt;/strong&gt;、&lt;strong&gt;Settings&lt;/strong&gt; 等等功能，通过 Molecule 内置的服务，可以轻松的使用和扩展。&lt;/p&gt;
&lt;h2 id="与其他开源的 Web IDE 的区别？"&gt;与其他开源的 Web IDE 的区别？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;React.js 应用无缝接入&lt;/li&gt;
&lt;li&gt;基于  React.js 的组件库，更好的 &lt;strong&gt;UI 自定义&lt;/strong&gt;能力&lt;/li&gt;
&lt;li&gt;基本兼容了 VS Code  上千种 ColorTheme 扩展&lt;/li&gt;
&lt;li&gt;Molecule 只是一个单纯的 &lt;strong&gt;Web IDE&lt;/strong&gt; &lt;strong&gt;UI 交互&lt;/strong&gt;框架，不涉及例如&lt;strong&gt;文件系统&lt;/strong&gt;、&lt;strong&gt;版本管理&lt;/strong&gt;、 &lt;strong&gt;LSP、DAP&lt;/strong&gt;、&lt;strong&gt;Terminal&lt;/strong&gt; 等更复杂的 IDE 功能，需要开发者自己手动实现。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="如何使用?"&gt;如何使用？&lt;/h2&gt;
&lt;p&gt;请阅读&lt;a href="https://dtstack.github.io/molecule/docs/quick-start" rel="nofollow" target="_blank" title=""&gt;快速开始&lt;/a&gt;文档。&lt;/p&gt;
&lt;h2 id="接下来的规划"&gt;接下来的规划&lt;/h2&gt;
&lt;p&gt;Molecule 当前还是一个 &lt;strong&gt;Beta&lt;/strong&gt; 版本，很多 API 还不够稳定。早期参考了一些 VS Code 的设计概念，API 设计不够简单；目前默认的 Workbench 是 VS Code 版本的布局，后期会考虑丰富布局（Layout）系统；Color Theme 交互还有很多细节需要优化。&lt;/p&gt;</description>
      <author>wewoor</author>
      <pubDate>Tue, 21 Dec 2021 13:34:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/42015</link>
      <guid>https://ruby-china.org/topics/42015</guid>
    </item>
  </channel>
</rss>
