Что такое монорепо?
А Монорепо это один репозиторий, который может иметь один или несколько проектов внутри него. Вы можете иметь 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”