Answer the question
In order to leave comments, you need to log in
How to implement a plugin system in TypeScript?
Good afternoon! There is a project with the structure:
app/
---plugins/
------plugin1.ts
------plugin2.ts
------...
---main.ts
in the plugins folder there are plugins / application components that can be added later (with subsequent "recompilation" of course).
How can I import all these plugin classes into main.ts? I tried to make them a common namespace, but it does not help. The only way that helped is a crutch:
// ожидающие загрузки плагины
let waitLoad:Array<string> = [];
// получаем все зарегестрированные модули
for(let name in window['require'].s.contexts['_']['registry']) {
// Если модуль находится в папке плагинов...
if(name.slice(0, 8).toLowerCase() === 'plugins/') {
// Добавляем его в массив ожидающих загрузку (т.к. загрузчик модулей загружает их асинхронно)
waitLoad.push(name);
// Импортируем модуль
window['require']([name], function(a,b,c) {
// удаляем из ожидающих
waitLoad.remove(name);
// регистрируем в самописной системе плагинов
addFieldType(a.default);
// если плагинов ожидающих загрузку больше нет, то вызывает событие готовности
if(waitLoad.length === 0) {
onLoad();
}
});
}
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question