跳到主要內容

擴充套件載入

載入與依賴項

擴充套件允許有一個或多個依賴,一個擴充套件依賴的全部擴充套件必須先序於該擴充套件被載入。如果兩個擴充套件之間沒有直接或間接的依賴關係,那兩個擴充套件的載入順序是隨機的。

載入模式

擴充套件的載入模式分為主動載入和被動載入,其在編輯器中的解除安裝行為不同。

主動載入是編輯器或使用者主動的要求載入某一個擴充套件;而在載入某一個擴充套件時,如果該擴充套件存在依賴,那麼其依賴被隱式載入的行為稱為被動載入。

如果一個擴充套件在載入鏈中既是主動載入又是被動載入,那麼其載入模式為主動載入。

如果一個擴充套件被被動載入了,那麼他不應當被主動解除安裝。

載入序與解除安裝序

當一個擴充套件被載入時,其所有的依賴項必須必該擴充套件更早被載入,且其所有的依賴項均為被動載入模式。

當一個擴充套件被解除安裝時,其所有的非主動載入模式的依賴項均後序於該擴充套件被解除安裝,所有依賴該擴充套件的擴充套件均先序於該擴充套件被解除安裝。

事件響應

擴充套件響應一個具體事件通過編輯器直接呼叫外掛的相關方法,如對於呼叫擴充套件 A 的 onInit 事件,即直接呼叫 a.onInit(),其中 a 表示擴充套件 A 的一個實例。

當擴充套件實例沒有定義某一個事件的時候,編輯器呼叫該事件時不會給出警告或錯誤,而應該跳過對其的呼叫。例如,如果某個擴充套件不存在 onInit 事件,那麼這個擴充套件也應當被正常載入,但不會響應 onInit 事件。

下面是擴充套件的全部事件及對其的解釋:

onInit():當外掛被啟用時觸發。在這個事件中,擴充套件應當完成對編輯器內容的新增。

beforeProjectLoadExtension(data, extensions):在編輯器載入一個專案檔案時,該事件在載入專案所需的擴充套件之前被觸發,這個事件會被發送到所有的外掛,無論是否被載入。

beforeProjectLoad(data, extensions):當編輯器在載入一個專案時,觸發這個事件。參數 data 表示目前專案的數據,參數 extensions 表示目前專案所需要的擴充套件。在這個事件中,擴充套件應當完成對舊版本專案的替換,以保證其適合新版本。請注意,如果原專案和目前環境完全一致,這個事件依然會被觸發,此時擴充套件不應當修改該專案。擴充套件中的這一事件應當提供判斷,保證版本遷移的正確性。

beforeProjectSave(data):當編輯器在儲存一個專案時,觸發這個事件。參數 data 表示目前專案的數據。

onUninit():當外掛被禁用時觸發。在這個事件中,擴充套件應當完成對新增到編輯器的內容的刪除。