процесс развертывания приложения yarn Workspace
Мы используем рабочие области пряжи, и это работает, как ожидалось, для разработки.
Это наша структура каталогов
- Родитель
- Программы
- Приложение1
- pacakge.json
- node_modules
- src
- Приложение 2
- pacakge.json
- node_modules
- src
- Приложение 3
- pacakge.json
- node_modules
- src
- Приложение 4
- pacakge.json
- node_modules
- src
- Приложение1
- Общий
- Строить
- package.json
- node_modules
- Программы
Мы используем WebPack модуль федерацию закодировать акции между приложениями и в то же время также с использованием Webpack псевдонима для кода в общей директории (Мы хотим , чтобы некоторые из кода , чтобы быть сгруппированы в каждом приложении).
Все это хорошо работает для разработки, поскольку рабочее пространство yarn очень хорошо управляет зависимостями.
Нам нужно индивидуальное развертывание всех наших приложений, но у нас возникают проблемы с разрешением зависимостей node_modules для общего каталога. зависимости в общей директории выбраны из node_modules на уровне Родитель в то время как зависимости в директории App1 получает взял из node_modules в App1 или node_modules в Родитель
Для развертывания App1 у нас есть следующие варианты.
Решение 1.
a) Установите все зависимости на родительском уровне (при этом будет очень сложно узнать, какие зависимости принадлежат какому приложению). Это также заставит сборку App1 быть внутри родительского на сервере времени выполнения (для ssr мы не связываем node_modules).
б) Сгенерируйте package.json в Parent динамически, взяв пересечение зависимостей в package.json внутри App1 и package.json внутри Parent1.
Решение 2.
Установите все зависимости внутри App1 и Parent (это объединит повторяющиеся зависимости и не будет работать для нашего варианта использования, где мы используем React)
Решение 3.
Установите необходимые зависимости внутри App1 и создайте символическую ссылку в node_modules в Parent для зависимостей, необходимых внутри Shared
Ни одно из этих решений не кажется идеальным. Пожалуйста, подскажите, есть ли другое возможное решение этой проблемы, и если нет, какое решение вы рекомендуете из вышеперечисленных общих решений.