Часто при выполнении слияний Git в проектах Node.js возникают конфликты в package-lock.json или yarn.lock. Обычно это происходит, если обе ветки изменили package.json или обновили зависимости.
Однако, поскольку это сгенерированные файлы, исправлять конфликты вручную нецелесообразно и не рекомендуется. Простой способ их решения заключается в следующем:
git checkout --theirs package-lock.json # If using yarn, instead do: # git checkout --theirs yarn.lock npm install
После этого в качестве проверки работоспособности подтвердите, что проект все еще собирается и работает.
Если вы используете Git в графическом интерфейсе, таком как GitKraken или VSCode, откройте package-lock.json (или yarn.lock) в окне разрешения конфликтов и найдите кнопку с надписью «Принять их» или аналогичную.
Что это делает?
git checkout --theirs package-lock.jsonкопирует файл блокировки из входящей («другой») ветки. npm install обновляет его изменениями, внесенными вашей веткой в package.json.
Зачем беспокоиться о создании package-lock.json?
В сочетании с npm ci это делает установку зависимостей воспроизводимой.
npm install иногда может обновлять зависимости, что обычно не является проблемой, но может привести к сбою конвейера развертывания, если зависимость выпускает неработающее обновление. Например, это произошло с aws-sdk некоторое время назад, поэтому, если у вас была эта зависимость и вы не использовали npm ci, велика вероятность того, что ваш конвейер сломался в то время.
Зафиксированный файл блокировки и использование npm ci вместо npm install в конвейере развертывания должно защитить вас от подобных проблем.
Если вы используете пряжу, эквивалентом npm ci будет yarn install --frozen-lockfile.
Другие предложения
Избегайте фиксации нескольких типов файлов блокировки (например, package-lock.json и yarn.lock) и, соответственно, избегайте использования нескольких диспетчеров зависимостей в одном проекте. Обсудите со своими товарищами по команде, какой менеджер зависимостей вы собираетесь использовать, и используйте только его.
Используйте NVM или альтернативу для управления несколькими версиями Node. Это может пригодиться, если у вас есть проект, который работает только со старой версией Node, но в остальное время вы хотите использовать более новую версию.
Для большей уверенности в будущем подумайте о том, чтобы задокументировать, с какой версией Node должен работать проект. При использовании NVM вы можете создать файл .npmrc с выводом из node -v, например:
v16.14.2