Вводные данные
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 загрузит только нужные для текущей ветки зависимости.