告別國外 IDE,阿里 螞蟻自研 IDE 研發框架 OpenSumi 正式開源

經歷近 3 年時間,在阿里集團及螞蟻集團共建小組的努力下,OpenSumi 作為國內首個強定制性、高性能,兼容 VS Code 插件體系的 IDE 研發框架,今天正式對外開源。

一? OpenSumi 是什么?

OpenSumi 是一款面向垂直領域,低門檻、高性能、高定制性的雙端(Web 及 Electron)IDE 研發的框架。

框架早期由阿里集團淘系工程團隊及螞蟻集團體驗技術部、研發效能團隊聯合發起,共同研發的 IDE 標準化研發框架。它基于?TypeScript?+?React?進行編碼,實現了包含資源管理器、編輯器、調試、Git 面板、搜索面板等核心功能模塊,開發者只要基于我們的起步項目進行簡單配置,便可以快速地搭建屬于自己的本地或云端 IDE 產品,框架自身兼容 VS Code 插件生態,主流 VS Code 插件均可無縫在基于 OpenSumi 研發的產品中運行,同時,框架也為開發者提供多種低成本,高定制的視圖定制能力,能滿足 IDE 場景下絕大多數的視圖定制場景。

對于 IDE 研發,現今市面上已有了?code-server、Theia?等開源方案,我們為什么選擇自研實現?自 2019 年開始,我們便發現了阿里及螞蟻集團內部已經有了許多 IDE 產品,大部分產品對于 IDE 產品的前期建設大抵相同,但是這部分前期建設工作占用的則是一個團隊少則幾個月,多則半年一年的時間,存在著大量的重復勞動問題,而在部分團隊使用開源方案的過程中,大家也或多或少遇到了一些問題,如定制能力有限、源碼依賴深、維護困難、無法滿足內部能力需求等問題。最終,我們決心集合多個團隊的力量走上自研實現的道路。

二? OpenSumi 有什么優勢?

正如前面所說的,OpenSumi 是一款面向垂直領域,低門檻、高性能、高定制性的雙端(Web 及 Electron)IDE 研發的框架。它的特點主要體現在下面幾點內容:

1? 全面的視圖定制能力

除了與主流瀏覽器相近的性能及編碼體驗外,在面向業務的垂直領域,我們擁有遠超于同類框架的定制能力,基于我們的基礎框架,你可以自由的通過?模塊?或?插件?定制你的 IDE 產品,能達到真正意義上的 “全視圖定制” 能力。

在許多內部產品實現階段,我們會自然的通過?模塊?去實現基礎能力獲得更好的維護性,而通過?插件?去實現業務上的視圖或能力上的定制,達到更高的定制性。以阿里內部的部分研發場景為例,結構分層如下:

2? 豐富的垂直領域研發支撐經驗

OpenSumi 在正式開源之前,在阿里及螞蟻集團內部已持續性孵化了兩年之久,期間沉淀落地了一系列具有代表意義的垂直領域下的研發案例,大部分你能想到的研發實踐場景,可能都可以在 OpenSumi 中找到實踐經驗。

1. 小程序研發場景

針對小程序研發場景,?支付寶小程序開發者工具?以及?淘寶小程序開發者工具?便是使用了 OpenSumi 作為核心框架進行實現,截止目前,月服務開發者數量已達到 2W +。

通過我們的?Toolbar貢獻點及額外的?sumi API,我們能通過插件實現進一步的視圖定制。如:

1)定制不同的?Toolbar?展示

2)實現獨立可通信的窗口調度(如模擬器)

同時,共享的底層及插件能力,也讓端到端的快速移植成為可能,通過對??支付寶小程序開發者工具?相關插件的移植,我們在短短 1 個月的時間內就完成了對功能相近,但使用場景不同的??淘寶小程序開發者工具?初期版本的支持,同時孵化出內部使用的 O2 客戶端。

2. 云端一體化研發鏈路

在云端一體化研發鏈路上,我們在外部有?阿里云云開發平臺?,內部則有 O2、Ant Codespaces 等產品。

常規的研發鏈路如下圖上半部分所示。

我們在開始一個項目研發前往往都需要經歷一些或簡單或繁瑣的環境配置工作,你的編碼環境也與云上環境存在割裂,借助阿里云等云產品的容器能力, 我們可以通過 OpenSumi 搭建屬于企業或團隊的云端編碼環境,讓開發者真正省去環境配置問題,在云端完成一切的開發工作。

通過深度的流程定制,能讓開發者快捷的進入開發狀態。

通過和內部研發平臺打通,可以一站式的完成開發、測試、部署等工作。

3. 純前端搭建

純前端搭建能力是 OpenSumi 在阿里及螞蟻集團內應用的最為廣泛的一塊能力,它提供了一種不需要依賴服務端去提供編輯器啟動所需的 Node.js 服務,直接通過純前端資源及靜態接口定義便能搭建起來一個具備編輯器基本界面的能力。

其實現核心是通過對文件、Git 等原本依賴 Node 的服務進行了一層服務層抽象,讓開發者可以手動定義文件讀寫等服務的具體邏輯,同時基于 OpenSumi 提供的?Web Worker API?, 將語言服務運行于瀏覽器的?Web Worker?環境中,從而實現了框架的去 Node 化,達到純前端搭建的效果。

基于這層實現,你完全可以基于?GitHub Rest API?去實現一個純前端編輯器,可以從上面直接進行 GitHub 代碼的查看、編輯及提交等操作,后續我們會考慮做一個相應的案例出來。而在內部,典型的應用是如下一些場景:

1.代碼評審

2.代碼展示

3.遠程筆試

我們在 OpenSumi 代碼倉庫中也提供了一個簡易的入門案例?opensumi/ide-startup-lite?[1], 你也可以直接通過?預覽頁面?[2]直接查看 Demo 效果。

3? 完整的 VS Code 的插件能力支持

相信關注過 IDE 框架的同學對?Theia?一定不陌生,Theia 作為一款兼容 VS Code 插件的 IDE 框架,確實兼容了一部分 VS Code 插件能力,但對于后續 VS Code API 的兼容已經越來越少,基本依賴社區開發者的發現貢獻。

OpenSumi 設計之初就是要兼容 VS Code 插件生態,故我們對于框架會有持續性的要求,開源之后,我們計劃每三個月時間去完成一次 VS Code 插件 API 的適配工作,適配計劃的制定,將會由相應的版本管理人員組織在討論區進行,當前已適配至 VS Code v1.60.0 版本標準 API, 進度可見?適配計劃?。

三? OpenSumi 與市面主流框架的區別

我們在設計初期便對?VS Code?、Theia?的源碼進行了深入的學習,實現過程中,為了兼容 VS Code 插件生態,同時兼容主流編輯器的一些功能及體驗,部分設計及實現上我們有部分源碼也參考了兩位老師的實現,對應代碼區塊已標注了版權頭信息。

1? 與 VS Code 的關系

VS Code 作為市場占用率較大的 IDE,其核心為一個 IDE 產品,本質上與我們的?框架?屬性存在區別,整體上是一個 ToC 的產品,開發者進行定制的門檻及成本較高,可自定義的內容也比較有限,大部分是通過?插件?的形式進行有限拓展。

而我們的框架主要是服務用戶為 ToB 用戶,對那些需要通過 IDE 框架搭建自有的 CloudIDE / 本地 IDE 產品而又沒有充足技術研發能力的中小企業是一個簡單、便捷的開發選項之一。

2? 與 Theia 的關系

Theia 作為后起之秀,借鑒 VS Code 的一些設計理念,經過近幾年的發展逐步成熟,社區也相對繁榮,背靠 Eclipse 基金會,也是 IDE 開發者一個不錯的開發選項,與我們的 OpenSumi 框架是存在競爭關系的。

Theia 本身提供了一種模塊化構建 IDE 產品的能力,大部分視圖上的定制絕大部分可通過?模塊?的方式去進行拓展的(這點在我們的 OpenSumi 中也有借鑒相應思路),在?插件?能力上兼容了大部分的 VS Code 插件,提供了一份 VS Code 插件 API 的子集能力,部分插件 API (如 debug、language 等)并沒有完全實現且也無后續持續性的跟進計劃。

基于上面這些點上, OpenSumi 框架不僅支持了基礎的?模塊?方式拓展,在?插件?層面上,我們有持續性跟進 VS Code 標準 API 的規劃 (當前已實現 VS Code 1.16.0 版本 API),同時,我們基于實現了一個前端沙箱,提供了一系列的?sumi?API 用與通過?插件?的方式自由地拓展我們的視圖能力,熟悉?React?的前端同學可以直接上手進行前端組件的編寫,通過我們提供的豐富的 API 去實現相應的功能視圖。

四? 為什么要開源?

IDE 產品的研發,一直以來都是一件門檻較高,費時費力的事情,我們希望通過開源 OpenSumi 幫助對 IDE 有興趣的開發者更好的了解并掌握 IDE 研發這項技術,讓更多的開發者可以以一種低門檻的方式去研發自己的 IDE 產品,通過社區中開發者的使用,也可以幫助我們更好的改進我們的框架,獲得更多的需求場景輸入,同時,通過社區的影響力讓框架獲得更加長遠的發展。

五? 后續規劃

1? 版本發布

框架目前每兩至三周會進行一次迭代發布任務,由版本管理員統一維護合入相關功能及問題修復等內容,每次迭代過程中我們都會安排兩名 “版本校驗員” 進行版本檢驗,在測試通過后,我們才會升級一位?minor?版本后發布,我們會持續性保證最新的兩個?minor?版本的有效性,即 “如果發現了影響功能的問題,我們會向最新的兩個?minor?版本同步修復,發布?patch?版本 ”。版本示意如圖所示:

以最近 2022 年 1 月份的迭代計劃為例,版本發布的計劃可見:Iteration Plan for v2.14.0[3]

2? Roadmap

當前對于 OpenSumi 2022 年的 Roadmap 已有初步雛形,見?OpenSumi 2022 Roadmap [4]討論,后續會根據社區反饋及討論在 2-3 月份正式確定。

我們會持續性的完成 VS Code API 的適配、編碼/調試體驗優化、性能優化工作,同時積極收集社區中反饋的功能需求,以雙周迭代的方式選擇性吸收進框架計劃中。

同時,對于框架,我們也設定了一些基礎的長期目標,如下圖所示:

六? 寫在最后

今天 OpenSumi 的開源只是我們邁出的一小步。我們非常期待得到您的反饋,也歡迎使用 OpenSumi 打造一款屬于你自己的 IDE 產品。

最后,如果你對 OpenSumi 有相應的興趣,你也可以來?opensumi/core?[5]倉庫轉轉,為我們的框架貢獻一點你的代碼和意見,這將是是我們莫大的榮幸。

項目地址:https://github.com/opensumi/core

官網地址:http://opensumi.com/

[1]https://github.com/opensumi/ide-startup-lite/

[2]https://opensumi.github.io/ide-startup-lite/

[3]https://github.com/opensumi/core/issues/333
[4]https://github.com/opensumi/core/discussions/316

[5]https://github.com/opensumi/core

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284434.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

window-memcache技術隨筆

memcached.exe軟件放置到非中文,非空格的目錄,把MSVCR71.DLL文件放在memcached.exe同目錄下啟動,控制面板中打開window功能-Telnet客戶端memcache服務方法一:管理員身份打開黑窗口 d:(mem的所在盤)cd memmemcached.exe -p 11211方法二: 安裝為Windows的系統服務memcached.exe -…

將不確定變為確定~老趙寫的CodeTimer是代碼性能測試的利器

首先,非常感謝趙老大的CodeTimer,它讓我們更好的了解到代碼執行的性能,從而可以讓我們從性能的角度來考慮問題,有些東西可能我們認為是這樣的,但經理測試并非如何,這正應了我之前的那名話:“機器…

聊聊 C++ 中的幾種智能指針(下)

一:背景 上一篇我們聊到了C 的 auto_ptr ,有朋友說已經在 C 17 中被棄用了,感謝朋友提醒,今天我們來聊一下 C 11 中引入的幾個智能指針。unique_ptrshared_ptrweak_ptr看看它們都怎么玩。二:三大智能指針詳解 1. uniq…

iOS回顧筆記( 02 ) -- 由九宮格布局引發的一系列“慘案”

iOS回顧筆記( 02 ) -- 由九宮格布局引發的一系列“慘案” 前言(扯幾句淡先) 回顧到學習UI過程中的九宮格布局時,發現當時學的東西真是不少。 這個階段最大的特點就是:知識點繁多且瑣碎。 我們的目標就是要將…

【GlobalMapper精品教程】007:如何加載谷歌衛星影像?

“Global Mapper支持所有OGC標準數據源類型,例如用于流式柵格地圖的WMS / WMTS,用于矢量數據集的WFS和用于為指定區域下載單個數據文件的WCS。預先切片的圖像和地形數據集也可以使用OSM(OpenStreetMaps)、TMS(Tiled Map Service)和Google Maps瓦片架構支持。您只需要選擇適當…

LVS/keepalived配置

LVS/DR keepalived配置注意:前面雖然我們已經配置過一些操作,但是下面我們使用keepaliave操作和之前的操作是有些沖突的,所以若是之前配置過DR,請首先做如下操作:dr上執行:$ipv -Cifconfig eth0:0 down前…

Mysql清空表(truncate)與刪除表中數據(delete)的區別

2019獨角獸企業重金招聘Python工程師標準>>> 為某基于wordpress搭建的博客長久未除草,某天升級的時候發現已經被插入了幾萬條垃圾留言,如果一條條刪除那可真是累人的活。遂考慮直接進入mysql直接清空表或者刪除表中數據。 本文記錄一下這2種操…

[轉]云原生到底是什么?

📋 個人簡介 💖 作者簡介:大家好,我是阿牛😜 📝 個人主頁:館主阿牛🔥 🎉 支持我:點贊👍收藏??留言📝 💬格言&#xf…

【GlobalMapper精品教程】008:如何根據指定區域(shp、kml、cad)下載衛星影像?

本文講解在Globalmapper中根據指定的范圍(shp、kml、cad等格式)進行在線衛星影像的下載方法。 文章目錄 一、根據shp范圍下載谷歌影像1. 加載谷歌影像2. 加載shp矢量范圍3. 根據范圍導出影像二、根據kml范圍下載谷歌影像1. 生成研究區范圍kml2. 根據kml范圍下載影像三、根據CAD…

膛目結舌的代碼技巧!一看就是冷暴力~~~~

你見過哪些令你膛目結舌的代碼技巧? 代碼世界有很多令人大呼小叫的技巧!有的代碼像魔術師一樣巧妙地隱藏了自己,有的像魔法師一樣讓你眼花繚亂,還有的像瑜伽大師一樣靈活自如。它們讓我們驚嘆不已,讓我們覺得自己仿佛置…

聯合線程

聯合線程實際上就是把多線程又聯合成了一個線程,但這里還是要比單線程靈活很多,比如說,我可以讓一個線程到運行到某一個條件再聯合其他線程。當前線程與其他線程聯合在一起,又一種讓出cpu,而且直到別個線程運行完&…

Kafka學習征途:不再依賴ZK的KRaft

【Kafka】| 總結/Edison Zhou1新的KRaft架構在Kafka 2.8之前,Kafka重度依賴于Zookeeper集群做元數據管理和集群的高可用(即所謂的共識服務)。在Kafka 2.8之后,引入了基于Raft協議的KRaft模式,支持取消對Zookeeper的依賴…

探索java世界中的日志奧秘

java日志簡單介紹 對于一個應用程序來說日志記錄是必不可少的一部分。線上問題追蹤,基于日志的業務邏輯統計分析等都離不日志。JAVA領域存在多種日志框架,目前常用的日志框架包括Log4j,Log4j 2,Commons Logging,Slf4j&…

nginx的負載均衡集群

針對域名:vim /usr/local/nginx/conf/vhosts/lb.conf //自定義名稱upstream xrc { //別名server 192.168.0.1:80 weight2; //包含的主機server,負載均衡里面的機器server 192.168.0.2:80 weight1; //權重weight}server {li…

英語名言警句100句

1、寧為百夫長,勝作一書生。——楊炯 Better be a centurion than a scholar. 2、我是閑暇為所有中最的。——蘇格拉底 I am the most leisure of all. 3、立志不堅,終不濟事。——朱熹 If you are not determined, you will not help. 4、人學始知道&am…

RabbitMQ細說之開篇

前言關于消息中間件的應用場景,小伙伴們應該都耳熟能詳了吧,比如經常提到的削峰填谷、分布式事務、異步業務處理、大數據分析等等,分布式消息隊列成為其中比較關鍵的橋梁,也就意味著小伙伴們得掌握相關技能;當下相對比…

【Java】五種常見排序之-----------冒泡排序

冒泡排序: 原理: 將關鍵字較小的值不斷地上浮,將關鍵字值較大的不斷下沉;時間復雜度:O(n^2)空間復雜度:最優(即已經排好序)為0,平均空間復雜度為O(1);核心代碼:for(int i…

混戰的低代碼江湖,如何區分「李逵」和「李鬼」?

作者:APICloud 創始人劉鑫 這兩年,無論是資本層面,還是企業IT部門的關注,“低代碼”都是絕對的熱點。互聯網圈也似在一夜之間冒出了各種各樣的低代碼公司。 到底什么是低代碼?低代碼是新技術么?低代碼開發能…

關于捕獲鍵盤信息的processDialogkey方法2--具體應用

自定義控件里的keydown方法無法捕獲所有的按鍵消息的處理方法1(自定義控件里的keydown方法無法獲取的鍵值如上下左右鍵等) 處理辦法具體如下: 1、首先在自定義控件UserControl1中重寫ProcessDialogKey方法 自定義控件UserControl1中重寫Proce…

指針

指針 題目一: 計算兩數的和與差 本題要求實現一個計算輸入的兩數的和與差的簡單函數。 函數接口定義: void sum_diff( float op1, float op2, float psum, float pdiff ); 其中op1和op2是輸入的兩個實數,psum和pdiff是計算得出的和與差。 裁判…