Часто при выполнении слияний 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