Монорепо — это хранилище, содержащее несколько проектов. Например, монорепо может содержать фронтенд-приложение и бэкенд-приложение. Внутри проекта также могут быть общие библиотеки. В монорепо очень легко вносить изменения в несколько проектов одновременно.
Монорепо — это не то же самое, что монолит. Когда вы вносите изменения в монорепо, вам нужно перестроить только те проекты, которые затрагиваются этим изменением. Это важный момент, поскольку он позволяет командам работать независимо друг от друга и улучшает опыт разработчиков. В монолите все выпускается вместе. В монорепо вы можете гибко решать, когда и что выпускать.
Настройте рабочие пространства в вашем package.json
Yarn Workspaces позволяет нам настроить несколько пакетов в одном репозитории.
Начните с создания package.json
в корне проекта и добавьте следующее:
{
"private": true,
"workspaces": ["project-a", "project-b"]
}
Каждый проект должен быть перечислен в массиве workspaces
.
Затем создайте по одной подпапке для каждого рабочего пространства и добавьте package.json
в эти подпапки. Давайте добавим несколько зависимостей, чтобы посмотреть, как Yarn справится с этим.
{
"name": "@jmalvarez/project-a",
"version": "1.0.0",
"dependencies": {
"lodash": "4.17.21",
"@jmalvarez/project-b": "1.0.0"
}
}
{
"name": "@jmalvarez/project-b",
"version": "1.0.0",
"dependencies": {
"lodash": "4.17.21"
}
}
Наша установка готова. Выполните теперь yarn install
.
Как вы можете видеть, создана только одна папка node_modules
для работы со всеми зависимостями. Нет никаких дублированных зависимостей. Более того, нам не нужно было использовать yarn link
, чтобы потребовать project-b
от project-a
.
Как запускать команды
Чтобы добавить новые зависимости, достаточно выполнить соответствующую команду в подпапке проекта.
cd project-a
yarn add uuid
Другая возможность запуска команд из корневой папки — использование yarn workspace <workspace_name> <command>
. Например, чтобы добавить новую зависимость из корневой папки, мы можем сделать следующее:
yarn workspace @jmalvarez/project-a add uuid
Если мы хотим выполнить одну и ту же команду в каждом рабочем пространстве, мы можем сделать это с помощью yarn workspaces run <command>
. Например:
yarn workspaces run test
Ресурсы
- Рабочие пространства Yarn
- yarn workspaces | Yarn
- рабочее пространство пряжи | Пряжа
- Заблуждения о монорепо: Монорепо != Монолит