#Как проявляется ошибка и когда применим способ
Когда обновление npm-пакета ломает сборку или работу приложения, безопасный откат должен восстановить согласованные package.json и package-lock.json, а не случайную смесь зависимостей. Особенно важно выяснить, применялись ли изменения базы или формата данных.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Версия пакета изменила APIКод использует удалённую функцию или новый формат конфигурации. | После обновления появляется воспроизводимая ошибка только в определённом сценарии. | Вернуться к проверенному выпуску либо поправить использование API. |
| Откатывают не весь набор зависимостейИзменён только package.json, а package-lock.json остаётся с новым деревом. | npm ci не проходит или устанавливается неподходящая комбинация. | Восстановить оба файла из одной проверенной фиксации. |
#Пошаговая диагностика и решение
- 1. Зафиксируйте момент поломкиОткройте журнал последнего успешного запуска и список изменений в Git. Сравните время обновления зависимостей с первым сбоем, выпишите пакет и фактический номер версии. Если изменения затрагивали данные или API внешнего сервиса, одного отката пакета может быть недостаточно.
- 2. Сохраните текущее состояние для анализаНа отдельной тестовой ветке сделайте копию package.json, package-lock.json и конфигурационных файлов. Проверьте git status, чтобы не потерять несохранённые правки. Не используйте git reset --hard на рабочем проекте и не редактируйте lock-файл вручную.
- Чтение состояния и истории изменений зависимостей; без прав администратораLinux · Терминал (Bash)КомандаЧтение состояния и истории изменений зависимостей; без прав администратора.
git status --shortgit log -5 --oneline -- package.json package-lock.json
- 3. Найдите последнюю проверенную фиксациюВ истории Git откройте конкретную фиксацию, где сборка проходила. Сравните версии зависимостей и настройки engines. Если такая фиксация есть, восстановите два файла в тестовой копии из неё, предварительно убедившись, что в текущей рабочей папке нет ценного несохранённого кода.
- 4. Восстановите согласованную пару файловВ отдельной ветке можно выполнить git restore --source=ХЕШ -- package.json package-lock.json, где ХЕШ — проверенная фиксация. Команда заменяет только эти два файла в текущей копии; убедитесь, что остальные новые зависимости не требуются изменённому коду.
- Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюЗамените ХЕШ реальным идентификатором; только в копии, перезаписывает содержимое двух файлов.
git restore --source=ХЕШ -- package.json package-lock.jsonКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 5. Проведите чистую установкуВ тестовой копии выполните npm ci. Она удалит текущий node_modules и установит зафиксированные версии, не переписывая lock-файл. Если появляется ошибка совместимости, проверьте одновременно версию Node.js и настройки .npmrc.
- В отдельной копии; заменит node_modules и может выполнить установочные скриптыLinux · Терминал (Bash)С осторожностьюВ отдельной копии; заменит node_modules и может выполнить установочные скрипты.
npm ciКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 6. Проверьте, что возвращены нужные версииВыполните npm ls ИМЯ_ПАКЕТА и тесты проекта. Проверьте сценарий, который ломался после обновления, и отдельно пройдите смежные сценарии, для которых пакет нужен. Если проблема не исчезла, не переносите этот откат на боевой сервер.
- Читает фактически установленные версии; замените имя пакетаLinux · Терминал (Bash)КомандаЧитает фактически установленные версии; замените имя пакета.
npm ls ИМЯ_ПАКЕТА
- 7. Перенесите откат штатным выпускомПосле успешного теста зафиксируйте восстановленные файлы отдельным коммитом и запустите согласованный выпуск приложения. При ошибках в рабочих данных откатывайте их только по проверенному плану восстановления; восстановление npm-пакета не отменяет миграции базы.
#Проверка результата и действия при повторении
После отката npm ci стабильно воспроизводит прежние версии, сборка и проблемный пользовательский сценарий выполняются. Если откат потребовал восстановления lock-файла и Node.js, фиксируйте оба условия в процедуре выпуска.
Если на указанном шаге результат отличается, остановитесь и запишите первое полное сообщение об ошибке, версию инструментов и проверенное состояние до исправления. Не переходите к опасным действиям на действующем проекте: повторите проверку на отдельной копии, верните сохранённые файлы и только затем выбирайте следующую причину.