Что такое монорепо?
А Монорепо
это один репозиторий, который может иметь один или несколько проектов внутри него. Вы можете иметь Frontend, Backend и Helper Tools, все в том же Монорепо
Отказ
У вас могут быть клиент и приложения BackOffice, как проживают в отдельных папках, которые потребляют API, проживающие в другой папке и наборе интерфейсы
Это будет передано вашими приложениями и API.
Если у вас был Multi-Reppo
один Репозиторий
будет содержать Клиент
Приложение, еще один, Backoffice
Еще один будет иметь API
И другой для интерфейсы
. Может быть, все ваши приложения будут потреблять API
и интерфейсы
через Пакет
Опубликовано на NPM
или какой-то другой менеджер пакетов.
Почему вы должны использовать это?
Если вы работаете в компании или команде, наверняка, у них будет лучшие практики и стандарты кода, определенные, и если они этого не сделают, они будут иметь их рано или поздно.
Также как компания растет в людях и в сложности, у вас будут отдельные команды, работающие над тем же или соотношению целей. У вас может быть председатель и команда Backend, оба работая над тем же целью в разных репозиториях, и это может привести к некоторым проблемам в будущем, как дублированные типы
медленное развитие и доставка времени и так далее.
А Монорепо
обращается к некоторым из этих вопросов, имея все в одном Репозиторий
Отказ Некоторые из преимуществ являются:
- Поддерживать лучшие практики вашей компании в одном месте и применить их без особых усилий
- Каждая лучшая практика, которую у вас есть, будет принята каждым проектом автоматически с помощью инструментов, таких как
Eslint
икрасивее
- Проще поделиться кодом между вашими проектами
- Общий код легче поддерживать
- Изменения, которые вы делаете, могут быть отражены на каждом проекте в то же время, что они сделаны
Недостаток монорепо
Хотя у него много преимуществ, как все вещи в жизни, это приходит с некоторыми недостатками
- Каждое изменение вашего общего кода будет отражать каждое приложение, которое у вас есть. Итак, вам нужно убедиться, что все все еще работает, как ожидалось в каждом затронутом приложении
- Проблемы с производительностью с вашими VCS (контроль версий системы) в качестве вашего
Монорепо
растет в размере. - Вашей команды/компании трудно предоставить конкретные разрешения доступа к конкретным командам, поскольку все в том же
Репозиторий
Отказ - Применяя некоторые конкретные правила для вашего
Монорепо
может быть проблемой. Как получить некоторые конкретные части этого и сделайте этоОткрытый источник
Отказ Это не легко выполнить и, вероятно, вам понадобятся конкретные инструменты, которые помогут вам с этим.
NX, инструмент, который поможет вам управлять вашим монорепом
А потом приходит NX
Отказ Инструмент, который стремится облегчить процесс управления A Монорепо
Предоставляя набор помощников и команд, которые разработчики и сопровождающие могут использовать для организации и развития быстрее в пределах Монорепо
Отказ
Это главная структура состоит из двух папок:
/Программы
Это место для хранения всех ваших приложений и их E2E
Тесты. Например, у вас может быть веб-сайт для вашего клиента и один для вашего BackOffice, и они оба могут потреблять некоторые Компоненты
создан на лимина
папка.
/Libs.
Это где вы храните каждый код, который вы хотите поделиться между вашими приложениями, созданными на приложения
папка. Например, вы могли бы иметь Библиотека компонентов
Внутри этой папки и используйте компоненты, созданные там внутри вашего Приложения
без много усилий. У вас также может быть API, который будет использоваться вашими приложениями, например.
Пример кода
Представьте, что у вас есть следующая кнопка внутри /libs/кнопка
export const Button = ({ onClick, children }) => { return }
А затем вы хотите использовать эту кнопку в вашем приложении, что он находится в /приложения/клиент
. Это легко, как это
import { Button } from '/button'; export const CustomPage = () => { function handleClick() {} return ( This could be a form) }
Почему nx?
NX помощники
NX поставляется с Предварительно построенный
Генераторы, которые направлены на содействие процессу создания приложений и библиотек к Реагировать
, Угловой
и многие другие рамки. Эти Генераторы
Может использоваться с помощью команд, которые вы работаете на вашем терминале, и он будет генерировать и добавлять код в папках и обновлять любые другие файлы, которые могут быть необходимыми.
И вы также можете создать свой собственный Генераторы
Чтобы удовлетворить вашу команду и потребности компании.
Другие вещи
- Он имеет очень хорошее расширение VSCode, которое облегчает управление
монореп
- У него есть
График зависимости
Это помогает узнать, какая часть вашего приложения должна быть построена снова и проверена когда что-то изменяется - У него есть один
package.json
файл в корнеМонорепо
Что стремится сделать весь ваш код использовать то же самоезависимость
версии - Он кэширует все ваши команды, такие как сборки и тестирование. Итак, в первый раз, когда вы запустите некоторую команду, это может занять некоторое время, но после этого он будет плавно быстрым из-за кэша, который был сделан.
Заключение
Выбор между движением с Multi-Reppo
или Монорепо
это сложный, оба они приходят со своим собственным набором льгот и недостатков. Одна вещь, которую я могу сказать вам, – это сбалансировать их с вашей командой и организацией, чтобы выбрать правильный инструмент для работы.
Не стесняйтесь Отправь мне твит и следуй за мной в Twitter 🤙.
Оригинал: “https://dev.to/samuelmpinho/monorepo-and-nx-2oic”