#Как проявляется ошибка и когда применим способ
Выполнение npm ci останавливается, когда описание зависимостей в package.json не совпадает с package-lock.json или lock-файл был создан при других настройках разрешения дерева. Команда npm ci намеренно НЕ исправляет lock-файл: это защита воспроизводимой установки.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Файлы не согласованыВ package.json изменили диапазон версии или добавили пакет, но не обновили lock-файл. | npm ci печатает сообщение о несовпадении ожидаемого набора пакетов. | Пересоздать согласованный lock-файл через npm install в рабочей ветке. |
| Разные параметры установкиLock был получен с особым правилом peer dependencies. | Локальная npm install проходит, а npm ci в сборочном окружении завершается ошибкой дерева зависимостей. | Сверить .npmrc и параметры установки. |
#Пошаговая диагностика и решение
- 1. Установите исходные условияОткройте терминал в папке проекта, где лежит package.json. Выполните указанные ниже команды без прав администратора; сравните версию Node.js и npm с журналом успешной сборки. Если package-lock.json отсутствует, команда npm ci не предназначена для этого проекта до его создания.
- Читают версии и параметры текущего проекта; не изменяют данныеLinux · Терминал (Bash)КомандаЧитают версии и параметры текущего проекта; не изменяют данные.
node --versionnpm --versionnpm pkg get namenpm config get legacy-peer-deps
- 2. Сохраните исходные файлыСкопируйте package.json, package-lock.json и проектный .npmrc в отдельный каталог, затем создайте рабочую ветку Git или копию каталога. Убедитесь, что в Git нет незакоммиченных изменений, которые нельзя потерять. Не запускайте npm ci в рабочей папке: команда удаляет имеющийся node_modules.
- 3. Найдите различие между двумя файламиОткройте package.json и package-lock.json редактором, сравните имя и диапазон версии проблемного пакета. Проверьте секцию packages[""], где находится состояние корневого проекта в современных lock-файлах. Если менялся пакет, который не попал в lock, это и есть вероятная причина; вручную не переписывайте его контрольные суммы.
- 4. Проверьте настройки формирования дереваОткройте .npmrc в корне проекта, если файл существует, и проверьте значения legacy-peer-deps и install-links. Если lock создан с нестандартным флагом, тот же проектный параметр нужен при npm ci; меняйте только проверенную настройку и сохраните .npmrc под контролем версий. Не проставляйте legacy-peer-deps=true без доказанного основания.
- 5. Согласуйте зависимости в копии проектаНа отдельной ветке, имея сохранённый lock-файл, выполните npm install; она может обновить package-lock.json. После этого просмотрите diff и проверьте, что изменились ожидаемые версии. Если diff затрагивает десятки посторонних пакетов, не принимайте его автоматически: сравните версии npm и проектные настройки.
- Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюnpm install может изменить lock-файл и выполнить скрипты зависимостей; только на проверяемой копии.
npm installgit diff -- package.json package-lock.jsonКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 6. Проверьте чистую установкуВ тестовой копии снова выполните npm ci. Команда должна завершиться без ошибки согласования и установить зависимости заново. Если остался конфликт peerDependencies, найдите его по первому ошибочному блоку; не применяйте --force как универсальное исправление.
- Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюУдаляет и создаёт node_modules внутри текущего проекта; не запускайте в рабочем окружении без резервной копии.
npm ciКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 7. Закрепите результат для сервераЗафиксируйте проверенный package-lock.json и необходимые настройки .npmrc в Git, используйте один режим npm ci при локальной сборке и на сервере. Если исправление невозможно, восстановите сохранённые файлы и вернитесь к несовместимым версиям зависимостей, а не к полному удалению проекта.
#Проверка результата и действия при повторении
Успех: npm ci в чистой копии устанавливает пакетное дерево, package-lock.json не изменился во время npm ci, а тестовая сборка проекта проходит. Если локально всё работает, но на сервере нет — сравните версии npm/Node.js, .npmrc и команду запуска сборки.
Если на указанном шаге результат отличается, остановитесь и запишите первое полное сообщение об ошибке, версию инструментов и проверенное состояние до исправления. Не переходите к опасным действиям на действующем проекте: повторите проверку на отдельной копии, верните сохранённые файлы и только затем выбирайте следующую причину.