Управление package.json и package-lock.json с помощью Git

#json #git #npm #node-modules #dependency-management

#json #git #нпм #узлы-модули #управление зависимостями #npm #модули узлов

Вопрос:

Я знаю, что вы должны добавить package-lock.json в свой репозиторий git, чтобы убедиться, что члены команды используют одни и те же версии зависимостей.

Запуск npm install проверит наличие package-lock.json и установит указанные там версии. Если файл блокировки отсутствует, он будет устанавливать пакеты из их источников, как указано в package.json .

Тогда package.json также должен быть добавлен в ваше репозиторий git?

В противном случае новый член команды, который клонирует репозиторий, получит файл блокировки, но файл package.json не может быть создан из файла блокировки, правильно?

Дополнительный вопрос: как следует обрабатывать конфликты слияния в package-lock.json? Поскольку они генерируются машиной, я обнаружил, что это происходит часто, и не всегда понятно, как их следует решать.

Комментарии:

1. package.json требуется — если вы когда-нибудь захотите добавить пакет, для этого потребуется использование package.json — не говоря уже о том, что он содержит центральное место для удобочитаемого анализа используемых пакетов И атрибутов проекта (команд, местоположений проекта и т. Д. И т. Д.)

2. Не говоря уже о том, что у вас не может быть проекта с only package.json — npm, который не будет знать, что делать при установке для новых разработчиков

Ответ №1:

Да, package.json также должен быть включен. Помимо того, что он содержит метаданные проекта и требуется by npm , он обеспечивает четкое и краткое представление явных зависимостей.

Что касается конфликтов, лучшим вариантом может быть использование одного из них полностью (не пытаясь объединить). Или просто создайте его заново с нуля. У вас может возникнуть много конфликтов на ранних этапах проекта, когда добавляются все основные зависимости.

Ответ №2:

Чтобы ответить на ваш бонусный вопрос:

Есть способ научить Git автоматически «объединять» package-lock.json файлы, используя драйвер слияния и .gitattributes файл.

TL; DR

Запустите это один раз на каждой машине разработчика:

 git config --global merge.theirs.name "Keep changes of upstream branch"
git config --global merge.theirs.driver "cp -f '%B' '%A'"
  

Добавьте следующий .gitattributes файл в свой репозиторий (и зафиксируйте его):

 package-lock.json merge=theirs
  

Более подробное объяснение см. В моем сообщении в блоге.