#Что означает ошибка и когда она возникает
Команда npm ci выполняет воспроизводимую установку: если package-lock.json расходится с заявленными зависимостями package.json, npm останавливается и не исправляет lock-файл автоматически. Это полезная защита при развёртывании. Причину следует устранять в изменениях проекта, а не удалением lock-файла.
#Как отличить возможные причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| В package.json обновили версию, не обновив lock-файлИзменились диапазоны dependencies или devDependencies, но package-lock.json не зафиксирован вместе с ними. | npm ci пишет, что указанные пакеты или версии отсутствуют в lock-файле. | Восстановить согласованную пару файлов и заново проверить установку. |
| Конфликт после слияния ветокСодержимое package.json и lock-файла собиралось из разных веток или разрешалось вручную без npm. | В Git недавно были конфликты в package-lock.json, установка работает только у автора ветки. | Повторно сформировать lock-файл на доверенной версии npm в отдельной ветке. |
| Разная настройка установкиИсходный lock-файл создан с флагами, меняющими дерево зависимостей, например legacy-peer-deps. | Есть ошибка peerDependencies, а в проектной .npmrc отсутствует использованная при генерации настройка. | Согласовать параметры установки с командой сборки, а не включать обход проверок без причины. |
#Пошаговая диагностика и устранение
- Убедитесь, что падает именно npm ciВ терминале VS Code в корне проекта выполните
npm ciтолько если это безопасная копия проекта: команда удалит её node_modules. Для рабочего каталога сперва изучите уже имеющийся журнал сборки; найдите сообщение о несоответствии package.json и package-lock.json. Не воспринимайте EACCES или отсутствие lock-файла как одну и ту же проблему. - Проверьте, что оба файла принадлежат одному проектуОткройте папку с package.json и package-lock.json. В терминале используйте
node --version,npm --version,git status --short, затемgit diff -- package.json package-lock.json. Если используется рабочее пространство npm workspaces, запускайте команды из корня соответствующего проекта и учитывайте файлы рабочих пакетов. - Определите, что менялось в зависимостяхСравните поля dependencies/devDependencies в package.json с соответствующим lock-файлом, обратите внимание на удалённые, добавленные или изменённые прямые зависимости. Если файлы принадлежат разным веткам, восстановите верную пару из одного коммита; не смешивайте случайный старый lock с новой схемой зависимостей.
- Создайте отдельную ветку или копию для исправленияПеред изменениями сохраните незакоммиченные файлы и создайте новую ветку Git (например, через интерфейс VS Code «Управление исходным кодом» → имя текущей ветки → Создать ветку). Не запускайте пересоздание lock-файла на рабочем сервере: исправление выполняют в исходниках и проверяют перед развёртыванием.
- Согласуйте lock-файл безопасной командойЕсли изменения в package.json намеренные, в доверенной копии выполните
npm install --package-lock-only --ignore-scripts. Параметр --package-lock-only обновляет lock без изменения установленного дерева node_modules; --ignore-scripts не запускает хуки пакетов в этом шаге. Проверьте результат git diff; возможны ошибки реестра и peerDependencies — разберите их, не добавляйте --force. - Убедитесь, что не пропали полезные измененияПосмотрите
git diff -- package.json package-lock.json. Согласован ли реальный список прямых зависимостей с заданием и не произошло ли неожиданной массовой смены версий? Если изменение неожиданно, верните файлы из сохранённого коммита и разберите причину. Не удаляйте package-lock.json ради успешного npm install. - Проверьте воспроизводимость в чистой копииСкопируйте проект в отдельный каталог без конфиденциальных файлов и неподтверждённых локальных пакетов. Выполните
npm ciв этой копии; убедитесь, что зависимости установились. Учтите: команда очищает node_modules перед установкой и может запускать скрипты пакетов, поэтому доверяйте исходникам и сборочному окружению. - Завершите исправление и предусмотрите откатВыполните предусмотренные scripts тестов (например,
npm run build, если команда есть), сохраните в Git оба файла с согласованными изменениями и повторите сборку CI. Если проверка не проходит из-за версий или специфических флагов, приложите журнал npm и сохранённые параметры установки. Для отката верните package.json и package-lock.json одним согласованным коммитом, а не по отдельности. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Минимальный пример и проверка на тестовом проекте
{
"dependencies": {"example-library": "^2.0.0"}
}#Проверка результата и действия при неуспехе
В чистой копии npm ci завершается успешно без изменения package.json и package-lock.json, а сборка/тесты проходят. Если после исправления локально CI снова падает, сравните версии Node/npm, .npmrc, параметры install-links/legacy-peer-deps и используемый рабочий каталог сборки.