Добрый день! Есть проект с структурой:
app/
---plugins/
------plugin1.ts
------plugin2.ts
------...
---main.ts
в папке plugins находятся плагины/компоненты приложения, которые в последствии могут добавляться (с последующей "перекомпиляцией" естественно).
Как мне импортировать в main.ts все эти классы плагинов? Пробовал делать им общее пространство имен, но это ничем не помогает. Единственный способ который помог является костылем:
// ожидающие загрузки плагины
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();
}
});
}
}
Хотелось бы просто иметь возможность писать так:
import * as plugins from './plugins/*';
чтобы уже plugins был массивом классов плагинов. Или хотябы, более грамотно загружать их в массив без асинхронной загрузки.
Есть ли какой нибудь способ? Или мне лучше пересмотреть архитектуру?
За ранее спасибо!