擴充套件載入
載入與依賴項
擴充套件允許有一個或多個依賴,一個擴充套件依賴的全部擴充套件必須先序於該擴充套件被載入。如果兩個擴充套件之間沒有直接或間接的依賴關係,那兩個擴充套件的載入順序是隨機的。
載入模式
擴充套件的載入模式分為主動載入和被動載入,其在編輯器中的解除安裝行為不同。
主動載入是編輯器或使用者主動的要求載入某一個擴充套件;而在載入某一個擴充套件時,如果該擴充套件存在依賴,那麼其依賴被隱式載入的行為稱為被動載入。
如果一個擴充套件在載入鏈中既是主動載入又是被動載入,那麼其載入模式為主動載入。
如果一個擴充套件被被動載入了,那麼他不應當被主動解除安裝。
載入序與解除安裝序
當一個擴充套件被載入時,其所有的依賴項必須必該擴充套件更早被載入,且其所有的依賴項均為被動載入模式。
當一個擴充套件被解除安裝時,其所有的非主動載入模式的依賴項均後序於該擴充套件被解除安裝,所有依賴該擴充套件的擴充套件均先序於該擴充套件被解除安裝。
事件響應
擴充套件響應一個具體事件通過編輯器直接呼叫外掛的相關方法,如對於呼叫擴充套件 A 的 onInit
事件,即直接呼叫 a.onInit()
,其中 a
表示擴充套件 A 的一個實例。
當擴充套件實例沒有定義某一個事件的時候,編輯器呼叫該事件時不會給出警告或錯誤,而應該跳過對其的呼叫。例如,如果某個擴充套件不存在 onInit
事件,那麼這個擴充套件也應當被正常載入,但不會響應 onInit
事件。
下面是擴充套件的全部事件及對其的解釋:
onInit():當外掛被啟用時觸發。在這個事件中,擴充套件應當完成對編輯器內容的新增。
beforeProjectLoadExtension(data, extensions):在編輯器載入一個專案檔案時,該事件在載入專案所需的擴充套件之前被觸發,這個事件會被發送到所有的外掛,無論是否被載入。
beforeProjectLoad(data, extensions):當編輯器在載入一個專案時,觸發這個事件。參數 data
表示目前專案的數據,參數 extensions
表示目前專案所需要的擴充套件。在這個事件中,擴充套件應當完成對舊版本專案的替換,以保證其適合新版本。請注意,如果原專案和目前環境完全一致,這個事件依然會被觸發,此時擴充套件不應當修改該專案。擴充套件中的這一事件應當提供判斷,保證版本遷移的正確性。
beforeProjectSave(data):當編輯器在儲存一個專案時,觸發這個事件。參數 data
表示目前專案的數據。
onUninit():當外掛被禁用時觸發。在這個事件中,擴充套件應當完成對新增到編輯器的內容的刪除。