#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
Более подробное объяснение см. В моем сообщении в блоге.