Theia


Eclipse Theia是一個用最先進web技術來開發多語言雲&桌面IDE的可擴展平台。

 

 特點:

  1. Theia的模塊化允許定制。
  2. Theia被設計成在桌面和雲端運行
  3. Theia是在一個獨立於供應商的開源基金會下開發的。

支持JavaScript, Java, Python ...

Theia建立在語言服務器協議上,受益於超過60個可用語言服務器的不斷增長的生態系統,為所有主要的編程語言提供智能編輯支持。

集成終端

Theia集成了一個功能齊全的終端,可以在瀏覽器重新加載時重新連接以保持完整的歷史記錄。

靈活布局

Theia的shell基於[PhosphorJS],這為可拖拽的程序塢布局提供了可靠的基礎。

 

Eclipse Theia指南

Eclipse Theia是一個雲和桌面IDE框架,它結合了經典Eclipse IDE的最佳部分和流行的VS代碼編輯器。它可以部署為本地桌面應用程序,也可以部署為基於瀏覽器的IDE。Theia項目是Eclipse雲開發(ECD)小組最新添加的,它完全是用TypeScript編寫的。
乍一看,這種體系結構和技術的變化可能看起來像一個陡峭的學習曲線,但仔細一看,Eclipse平台與其新的基於web的替代方案之間有許多相似之處。在接下來的文章中,我將介紹從Eclipse插件開發中了解的一些更重要的構建塊,並解釋Theia中的等價概念。除了顯著的共同點我將指出存在的一些不同,將幫助你深刻理解Theia如何工作。

應用程序外殼→Eclipse工作台窗口

讓我們從顯而易見的開始:當你啟動一個Theia應用程序時,首先看到的是Theia開發者所稱的應用程序外殼。與Eclipse工作台類似,它提供了以編程方式或通過用戶交互(即拖放)來布局所包含的構建塊的方法。

面板

標准的Theia shell由一個主區域組成,它類似於Eclipse中的編輯器區域。此外,外殼有三個可折疊的面板:左,右和底部。這些類型的面板可以包含任意數量的小部件,這些小部件在選項卡中排序,支持將它們類似於Eclipse選項卡組進行分割。

無透視

Theia不支持透視的概念。畢竟,它們從未真正被Eclipse社區以外的人所采用,而且很多人都不喜歡它們。但是由於Theia是一個開放的平台,所以可以很容易地添加對透視圖的支持。作為一名開發人員,我需要管理多個應用程序外殼布局,並提供在這些布局之間切換的方法,並允許其他人參與其中。
Theia在每個工作空間的會話之間存儲shell的布局。如果沒有以前的布局存在,擴展可以有助於' initialLayout '。

窗體小部件→Eclipse視圖/編輯器

面板和主區域中包含的元素稱為窗體小部件。Theia對編輯器的處理方式與應用程序外殼視圖的處理方式相同。這樣您就可以在面板和主區域中自由地安排編輯器和視圖。

單例小部件→視圖

那些應該最多只打開一次的小部件,如文件導航器或git小部件,被稱為單例小部件或在Eclipse中簡單地稱為視圖。實現這樣的窗體小部件非常簡單,Theia提供了一個方便的基類“AbstractViewContribution”。
這些小部件中的UI通常使用React實現。但是Theia並沒有強加任何特殊的JavaScript框架來允許重用所有的JavaScript庫。

編輯器

在Theia和Eclipse編輯器之間沒有太多區別。Theia嵌入了VS代碼的Monaco編輯器,並將其封裝在一個薄API中,這樣其他基於web的編輯器小部件也可以使用。通常通過語言服務器協議(LSP)提供語言支持,但是也有其他API可用。例如,可以使用復雜的內聯小部件裝飾編輯器。下面是來自gitpod的截圖。io是GitHub的一個在線IDE,它集成了代碼評審,因此允許在編輯器中內聯注釋。

命令

Theia中的命令是用戶在IDE中運行一些代碼的一種方式。它類似於Eclipse命令,因為它有惟一的id和名稱。沒有類別之類的東西,也始終只有一個實現命令的處理程序。根據上下文,極少數情況下(復制/粘貼)同一命令需要多個不同的實現,通過這些處理程序中的特定貢獻點解決了這種情況。

快捷鍵

快捷鍵非常重要,特別是對於開發人員工具。Theia提供了一個快捷鍵注冊表,其中可以注冊命令的快捷鍵。每個工作區或每個用戶都可以重新配置快捷鍵。
KeybindingContext相當於Eclipse IDE中的上下文。它允許在某些情況下啟用或禁用快捷鍵。可以重用KeybindingContext,它由一個函數組成,該函數實現上下文是否處於活動狀態。與Eclipse IDE不同,在其聲明中沒有上下文層次結構,因為可以通過從另一個上下文中調用更粗粒度的上下文輕松地對其進行建模。

菜單

除了討論命令和快捷鍵,我們還需要介紹菜單組件。菜單使用路徑在中央菜單注冊表中注冊。路徑由一系列id(字符串)組成,其中第一個段表示子菜單的一部分。例如,主菜單欄是用id“menubar”定義的。如果你想提供一個菜單項到編輯器的上下文菜單,你可以從id 'editor_context_menu'開始你的菜單提供路徑。任何視圖都可以添加新的頂級菜單路徑,從而允許其他擴展對該菜單進行貢獻。
其他段指向那些菜單中包含的組。其順序基於同一級別上的id的文本順序。這就是為什么組id通常以數字開頭。例如,如果你想在主菜單的文件菜單的開放部分提供一個項目,路徑將是:

export const MY_PATH = ['menubar', '1_file', '3_close', 'my_item'];

但是不要擔心,你可以並且應該經常使用一些常量。
菜單項指向命令id,可選的菜單項具有回調函數,用於指示其啟用狀態和是否可見。

Theia擴展→Eclipse插件

Eclipse平台和Eclipse Theia之間的另一個共同點是擴展模型。與經典的Eclipse IDE一樣,Theia應用程序是擴展的組合。在將Eclipse插件打包為OSGi包的地方,Theia擴展是通過npm包提供的。這使得我們可以重新利用生態系統和現有的技術。Theia擴展可以提供完整的IDE體驗並使用任何api。這允許構建定制的白色標記產品,就像Eclipse社區多年來使用Eclipse平台所做的那樣。

沒有plugin.xml

Theia應用程序是由inversify.js組成的,這是一個用TypeScript編寫的流行的依賴注入框架。每個擴展都可以通過在package.json中列出所謂的模塊來提供貢獻。這是惟一需要的配置文件。
Eclipse中的plugin.xml主要用於允許延遲加載插件。其思想是,您可以安裝大量的插件,它們將以聲明的方式貢獻給UI和擴展點。只有當用戶實際使用這些聲明性UI組件之一時,插件才會啟動。編程模型導致難以開發和維護大型的XML文件。交叉引用是通過id完成的,甚至還有某種表達式語言可以通過XML定義上下文和其他內容。
對於Theia來說,我們發現這是一個太大的折衷,特別是因為在實踐中,大多數插件都是遲早要加載的。
因此,在典型的Eclipse插件中在plugin.xml中完成的所有工作都是在Theia的情況下直接在代碼中完成的,從而減少了“代碼”,從而更好地集成並得到更好的工具支持。

插件的解決方案

正確的插件解決方案和為用戶提供可理解的錯誤消息(以防他們安裝的插件發生沖突)給許多開發人員和用戶帶來了巨大的麻煩。p2算法已經做了很多工作,但是在配置沖突的情況下,用戶經常會遇到令人困惑的錯誤消息。
由於Theia擴展遵循相同的思想,所以底層的問題(解決基於所有語義版本約束的擴展工作集)是相同的。

VS代碼擴展

VS代碼通過在一個約束沙箱模型中運行擴展並為所有擴展提供一個API來改善這種情況。因此,與我們在Eclipse或強大的Theia擴展中所擁有的大型復雜依賴關系圖不同,大多數擴展對VS代碼API只有一個依賴關系。所以在VS代碼的情況下,依賴關系圖通常是一個簡單的深度樹。主VS代碼API保持向后兼容。
VS代碼擴展不是在與主應用程序相同的線程/進程中執行,而是在它們自己的沙箱(工作程序)中執行。因此,如果它們崩潰了,它們不會像Eclipse插件或Theia擴展那樣破壞整個應用程序。
這聽起來很好,但是有一個顯著的缺點:擴展所能做的一切都需要通過這個API顯式地公開。這意味着在能力和靈活性方面有很多限制。例如,在VS代碼中,您不能提供完整的新視圖;只支持樹和HTML。

Theia支持VS代碼擴展

單一API還有另一個優點:它對實際實現進行了抽象。Theia已經支持LSP和調試適配器協議(DAP),兩者都是通過協議連接編輯器獨立功能的手段。語言服務器和調試適配器可以用任何語言實現,因為它們在自己的進程中運行,並且只能通過JSON-RPC連接進行通信。VS代碼的擴展API非常類似,但是要大得多。
長話短說,Theia將很快支持兩種擴展方式:

  • Theia擴展:提供充分的靈活性和集成,允許任意更改和貢獻。
  • VS代碼擴展:功能沒那么強大,但是在運行時安裝更安全,實現更簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM