Есть несколько подходов к этому. Что вам нужно сделать, это выяснить, какой рабочий процесс лучше всего подходит для вашей команды, организации и клиентов.
Если бы это зависело от меня, я бы подумал об использовании одного репозитория на модуль и использовании менеджера пакетов, такого как NPM, с частными или организационными пакетами для обработки конфигурации. Затем настройте конвейеры выпуска сборки, которые будут распространяться на репозиторий в новых сборках.
Таким образом, все, что вам нужно, - это основной файл и файл манифеста пакета для пользовательской установки. Вы можете самостоятельно разрабатывать и развертывать новые версии, а также загружать новые версии в случае необходимости на стороне клиента.
Для большей плавности вы можете использовать файл конфигурации, чтобы сопоставить модули с маршрутами и написать общий скрипт генератора маршрутов для выполнения большей части начальной загрузки.
Поскольку пакет может быть любым, перекрестные зависимостивнутри пакетов будет работать без особых хлопот. Вам просто нужно быть дисциплинированным, когда дело доходит до управления изменениями и версиями.
Подробнее о частных пакетах здесь: Частные пакеты NPM
Теперь частные реестры NPM стоят денег,но если это проблема, есть несколько других вариантов. Пожалуйста, просмотрите эту статью, чтобы узнать о некоторых альтернативах - как бесплатных, так и платных.
Способы создания личного реестра npm
Теперь, если вы хотите запустить своего собственного менеджера, вы можетенаписать простой сервисный локатор, который принимает файл конфигурации, содержащий необходимую информацию для извлечения кода из репозитория, загрузки его, а затем предоставляет какой-то метод для извлечения экземпляра в него.
У меня естьнаписал простую эталонную реализацию для такой системы:
Framework: locootion service locator
Пример проверки плагина для палиндромов: Пример плагина Locomotion
Приложение, использующее инфраструктуру для поиска плагинов: Пример приложения locomotion
Вы можете поэкспериментировать с этим, получив его из npm, используя npm install -s locomotion
, вам нужно будет указатьфайл plugins.json
со следующей схемой:
{
"path": "relative path where plugins should be stored",
"plugins": [
{
"module":"name of service",
"dir":"location within plugin folder",
"source":"link to git repository"
}
]
}
пример:
{
"path": "./plugins",
"plugins": [
{
"module": "palindrome",
"dir": "locomotion-plugin-example",
"source": "https://github.com/drcircuit/locomotion-plugin-example.git"
}
]
}
загрузить его так: const loco = require ("locomotion");
Затем он возвращает обещание, которое разрешит объект локатора службы, у которого есть метод локатора для удержания ваших служб:
loco.then((svc) => {
let pal = svc.locate("palindrome"); //get the palindrome service
if (pal) {
console.log("Is: no X in Nixon! a palindrome? ", (pal.isPalindrome("no X in Nixon!")) ? "Yes" : "no"); // test if it works :)
}
}).catch((err) => {
console.error(err);
});
Обратите внимание, что это просто ссылкареализация, и не является достаточно надежным для серьезного применения. Тем не менее, шаблон по-прежнему действителен и показывает суть написания такого рода фреймворков.
Теперь его необходимо расширить за счет поддержки конфигурации плагинов, инициализации, проверки ошибок, возможно, добавить поддержку внедрения зависимостей искоро.