Для этого чтения действительно рекомендуется иметь представление о настройке Lerna, иначе вы можете найти это немного запутанным из-за того, что я не объясняю слишком много о ее настройке.
Как вы, наверное, знаете, Lerna была устаревшей, поэтому нам пришлось искать утилиту, которая могла бы помочь нам заменить основу Lerna, и выбор пал на Turbo.
Tomasz Ducin 🇺🇦@tomasz_ducin
Lerna теперь официально мертвый проект.
github.com/lerna/lerna22:00 PM — 27 Apr 2022![]()
![]()
![]()
TLDR
Прежде всего, мы прочитали эту статью, которая помогла нам сравнить различные и популярные инструменты, существующие для управления Monorepo:
https://monorepo.tools/
Мы перешли на Turbo по следующим основным причинам:
- Мы переходим на Next.js и, если вы не знаете, Vercel является владельцем обоих инструментов, так что, таким образом, мы чувствовали, что выбор Turbo может принести нам чувство согласованности с используемыми инструментами.
- Исходя из их документации, миграция казалась простой (и так оно и было).
Этого было достаточно для того, чтобы мы попробовали сначала Turbo, не сомневайтесь, что сначала попробуете другие.
Контекст Lerna
Для начала я должен рассказать вам о том, как мы структурировали наши проекты и как мы использовали его для управления MonoRepo.
Как мы использовали Lerna:
- У нас она была глобально установлена для обоих проектов, локального и ci.
- Мы собирали пакеты в devtime в режиме dev, и как только это заканчивалось, мы запускали приложения в режиме dev.
- Мы собирали «пакеты» в режиме ci, и как только это заканчивалось, мы создавали приложения.
- Мы ничего не пихаем в личные пакеты.
Структура проекта:
apps/
../app-a
../app-b
packages/
../package-a
../package-b
lerna.json
package.json
Команды, используемые в Lerna:
# Bootstrap workspaces
lerna bootstrap
# Link lerna repos
lerna link
# Build the packages workspaces
lerna run build --scope="@company/package-a" --scope="@company/package-b"
# Build the project workspaces
lerna run build --scope="@company/project-a"
# Build the project workspaces
lerna run build --scope="@company/package-b"
Что нужно знать
- Turbo используется для выполнения задач и кэширования.
- Yarn workspaces используется для симлинкинга пакетов.
- Не забудьте удалить файлы node_modules и .lock, иначе при миграции могут возникнуть ошибки.
Миграция на turbo
В нашем случае мы используем его глобально для локального и ci, вы также можете установить его непосредственно в package.json:
npm install --global turbo
Теперь вам нужно удалить файл lerna.json и создать файл turbo.json со следующим содержимым:
Ссылка на документацию Turborepo
Для нас этого было достаточно, чтобы начать перенос наших команд, самое интересное в этом то, что вам нужно выполнить всего 1 команду для сборки всех деплоев приложения.
# Bootstrap workspaces
yarn install
# Build app a
turbo run build --scope="@company/app-a"
# Build app b
turbo run build --scope="@company/app-b"
(Не рекомендуется) На случай, если вам нужно что-то более явное:
# Bootstrap workspaces
yarn install
# Build package a
turbo run build --scope="@company/package-a" --no-deps
# Build package b
turbo run build --scope="@company/package-b" --no-deps
# Build app a
turbo run build --scope="@company/app-a" --no-deps
Вы можете модифицировать файл turbo.json, чтобы добавить больше команд для использования этого режима, но в нашем случае все было в порядке, и для других команд мы использовали рабочие пространства yarn:
yarn workspaces run lint:fix
yarn workspaces run prettier:fix
Обзор:
Я надеюсь, что эта статья поможет вам начать миграцию на Turbo и надеюсь, что она поможет вам мигрировать на более сложный рабочий процесс, чем мы.
Не забывайте следить за мной в Twitter, я, честно говоря, ничего не пишу, но я ретвичу много вещей, которые я нахожу интересными для разработчиков Backend и Frontend.