null

Оптимизация репозитория с Yarn Zero Installs с помощью Git LFS.

Вводные данные

Yarn Zero Installs — это подход, предлагаемый менеджером пакетов Yarn, который позволяет избавиться от необходимости выполнения команды yarn install после клонирования репозитория. Все зависимости, необходимые для работы проекта, хранятся непосредственно в самом репозитории (в директории .yarn/cache в виде zip-архивов), что делает его готовым к использованию сразу после клонирования.

Проблема заключается в том, что при клонировании репозитория загружается вся история изменений, включая все версии архивов с зависимостями (специфика работы git с бинарными файлами), что делает процесс клонирования медленным и ресурсоёмким. Однако у этой проблемы есть решение — Git LFS.

Git LFS (Large File Storage) — это расширение для git, предназначенное для управления большими файлами в репозиториях. Оно помогает справляться с ограничениями стандартного git, который плохо оптимизирован для работы с бинарными файлами. Расширение перемещает большие файлы в отдельное хранилище и берёт их версионирование на себя. Примечательно, что Github и Gitlab умеют с ним работать "из коробки".

Использование Yarn Zero Installs вместе с Git LFS позволяет эффективно управлять зависимостями и большими файлами в одном репозитории.

 

Настройка Git LFS для совместного использования с Yarn Zero Installs

Подготовим .gitignore:

# Исключаем node_modules, так как используем Zero Installs
node_modules/

# Исключаем временные файлы Yarn
.yarn/*
!.yarn/cache
!.yarn/releases
!.yarn/plugins

Добавим Git LFS в текущий репозиторий:

git lfs install

Добавим zip-файлы в трекинг LFS:

git lfs track "*.zip"

Эта команда изменит .gitattibutes (не забываем его закоммитить)

Необходимо убедиться, что используется Yarn 2 или выше:

yarn --version

Если это не так:

yarn set version berry

В последнюю очередь, необходимо убедиться что в .yarnrc.yml (генерируется после выбора версии) в поле nodeLinker указано значение "pnp".

 

Всё готово. Теперь при клонировании репозитория yarn автоматически готов к работе благодаря Zero Installs, а Git LFS загрузит только нужные для текущей ветки зависимости.