Я работаю над созданием коллекции микросервисов. Я использовал следующую структуру, где каждый элемент является своим собственным хранилищем.
my-project-logger
my-project-numbers-service
импорт:
my-project-logger
определения типов + объект класса (полная реализация)
my-project-alphabet-service
определения типа
my-project-alphabet-service
импорт:
my-project-logger
определения типов + объект класса (полная реализация)
my-project-client
импорт:
my-project-logger
определения типов
my-project-numbers-service
определения типов
my-project-alphabet-service
определения типов
Затем в моем package.json я сохраняю все зависимости, которые не требуются для определений типов, в devDependencies, поэтому они не устанавливаются при импорте пакета (только при клонировании из git).
Проблема возникает, когда, например, в случае my-project-logger
мне нужны только определения типов на клиенте, но мне нужна полная реализация служб. Я не уверен, как заставить репозиторий иметь два разных режима установки. Один, который устанавливает только определения типов, а другой - всю реализацию. Неспособность использовать npm (для публикации) также усложняет ситуацию.
Я также пытался использовать подход monorepo с lerna, но это делает развертывание микросервисов независимо с помощью docker крайне неэффективным, поскольку вам приходится вручную указывать каждую локальную зависимость в файле docker (поскольку я не могу использовать веб-сайт npm для публикации).
Последний подход, который я попробовал, - это создать репозиторий my-project-types
и иметь в нем типы для каждого репозитория, но это раздражало, потому что каждый раз, когда вы меняли тип, вам приходилось перетягивать репозиторий типов для каждого сервиса. это зависело от этого.