Удаление `package-lock.json` для быстрого разрешения конфликтов

В команде, созданной, как правило, я сталкивался с конфликтами слияния в package-lock.json и мое быстрое решение всегда было удалить файл и восстановить его с npm install, Я не задумывался всерьез о значении этого исправления, потому что раньше оно не вызывало какой-либо ощутимой проблемы.

Есть ли проблема с удалением файла и npm воссоздать его таким образом, вместо того, чтобы разрешать конфликты вручную?

4 ответа

Решение

Да, это может и очень плохо повлияет на весь проект.

  1. если ваша команда не работает npm install после каждого git pull Вы все используете разные версии зависимостей. Так что это заканчивается "но это работает для меня!" и "я не понимаю, почему мой код не работает для вас"

  2. даже если вся команда бежит npm install это все еще не значит, что все в порядке. в какой-то момент вы можете обнаружить, что ваш проект действует по-другому. в части, которую вы не меняли годами. и после (возможно, довольно болезненной) отладки вы обнаружите, что зависимость из-за 3-го уровня обновлена ​​до следующей основной версии, и это привело к серьезным изменениям.

Вывод: никогда не удаляйте package-lock.json, в вашем случае лучше сделать следующим образом:

Подход 1

  1. отменить ваши изменения в package-lock.json
  2. stash ваши изменения
  3. pull самая последняя версия кода
  4. бежать npm install для всех зависимостей нужно добавить
  5. отменить ваши изменения

Подход 2

  1. запустить слияние
  2. для разрешения конфликта выберите стратегию "только изменения" package-lock.json
  3. бежать npm install поэтому зависимости, которые вы хотите добавить, также включены в package-lock.json
  4. закончить с коммитом коммит

Да, это может иметь плохие побочные эффекты, может быть, не очень часто, но, например, вы можете иметь в package.json "moduleX": "^1.0.0" и у тебя раньше было "moduleX": "1.0.0" в package-lock.json.

Удалив package-lock.json и бег npm install вы могли обновлять moduleX до версии 1.0.999, не зная об этом, и, возможно, они создали ошибку или сделали обратное изменение (не следуя семантическому управлению версиями).

Во всяком случае стандартное решение для него уже есть.

  1. Устранить конфликт внутри package.json
  2. Бегать: npm install --package-lock-only

https://docs.npmjs.com/configuring-npm/package-locks.html

Я знаю, что это старый вопрос, но для будущих соискателей вы также можете использовать npm-merge-driver, который пытается автоматически решить проблемы слияния файлов, связанных с npm.

Просто установите его глобально npx npm-merge-driver install --global. Вы можете прочитать об этом здесь npm-merge-driver

Изменить: просто хочу предупредить людей, которые заинтересованы в использовании вышеуказанного пакета, что иногда он может вести себя нестабильно и его трудно удалить. Так что, хотя это полезный инструмент, он все же требует некоторой доработки.

npm i --forceделает работу за меня

Другие вопросы по тегам