Как перейти на Turbo с Lerna для управления Monorepo.

Для этого чтения действительно рекомендуется иметь представление о настройке Lerna, иначе вы можете найти это немного запутанным из-за того, что я не объясняю слишком много о ее настройке.

Как вы, наверное, знаете, Lerna была устаревшей, поэтому нам пришлось искать утилиту, которая могла бы помочь нам заменить основу Lerna, и выбор пал на Turbo.

Tomasz Ducin 🇺🇦
@tomasz_ducin
Lerna теперь официально мертвый проект.
github.com/lerna/lerna
22: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.

Оцените статью
Procodings.ru
Добавить комментарий