Как правильно создавать и запускать репозитории с использованием рабочих пространств Yarn?

#node.js #continuous-integration #yarnpkg #monorepo #yarn-workspaces

Вопрос:

Я работал над проектом с использованием монорепо и использованием рабочих пространств пряжи.

Он состоит из нескольких приложений и общих, например

  • «сервер» (приложение TS/Node),
  • «веб» (приложение React с интерфейсом Material),
  • «общий» (общий код JS , используемый во всех приложениях) и т. Д.

Мне трудно понять, как должен выглядеть процесс сборки и запуска в этом случае.

Что я делаю, так это:

  • Здание «общее»
  • Создание каждого приложения индивидуально («сервер», «веб» и т.д.)
  • Затем , чтобы запустить его, мне нужно node_modules , поэтому я копирую его из корня моего монорепо в каждую сборку приложения.
  • Затем я доставляю этот встроенный код node_модули на удаленные серверы (каждое приложение отдельно), где запускаю приложение.

Проблема здесь в том, что root node_modules содержит зависимости всех приложений, которые у меня есть в моем монорепо, например, MaterialUI, который вообще не нужен для приложения узла «сервер». В результате каждое готовое к отправке приложение весит более 400 МБ, что слишком много.

Что я пробовал: Моим первым шагом было то, что я мог бы переместить каждое приложение из monorepo для целей сборки и создавать его индивидуально (ожидая получить только то, что указано в их собственном пакете.json), но они, как я быстро понял, зависят от commons из monorepo, поэтому приложения нельзя создавать таким образом.

Поэтому мне кажется, что я что-то упускаю и делаю это неправильно, не мог бы кто-нибудь, пожалуйста, помочь мне?

Спасибо!