#Симптомы и условия возникновения
После npm ci пакет указан в package.json, но не найден в node_modules. Такое возможно для devDependencies при NODE_ENV=production, для optionalDependencies на неподдерживаемой платформе и при установке не из того каталога; это не обязательно ошибка npm. Для начала проверьте используемую версию среды и точный текст ошибки на копии проекта, не меняя рабочий сервер.
#Причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Отключены devDependenciesВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | В CI установлено NODE_ENV=production или --omit=dev | На стадии сборки включить dev, а в рабочем образе оставить только runtime-зависимости. |
| Не установлена optional зависимостьВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Пакет зависит от ОС/архитектуры, установка пропущена | Проверить поддержку платформы и журнал. |
| Команда запущена из другой папкиВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Вложенный пакет/monorepo имеет свой lock-файл | Запускать npm в нужном рабочем каталоге. |
#Пошаговая диагностика и решение
- 1. Проверьте, из какой папки запущен npmОткройте терминал из корня нужного проекта, где находятся
package.jsonиpackage-lock.json. В Linux/macOS выполнитеpwd, в Windows PowerShell —Get-Location; отсутствие одного из файлов означает неверный каталог либо неполный проект.
- 2. Посмотрите тип отсутствующей зависимостиОткройте package.json в текстовом редакторе. Найдите имя пакета в
dependencies,devDependenciesилиoptionalDependencies; значение определяет, должен ли пакет присутствовать в рабочей установке.
- 3. Проверьте фактическое деревоИз той же папки выполните
npm ls имя-пакета --depth=0. Код ошибки при отсутствии пакета и пустая строка в дереве помогут подтвердить, что нет физически установленной версии.
- 4. Посмотрите параметры omit и окружениеВыполните
npm config get omitи проверьтеNODE_ENV. Если dev-пакет требуется для сборки, npm ci подNODE_ENV=productionможет его опустить. Не переключайте настройки всей системы. - Терминал в корне проекта, чтение конфигурацииLinux · Терминал (Bash)КомандаТерминал в корне проекта, чтение конфигурации. Ожидается перечисление omit либо пустая настройка.
npm config get omit
- 5. Воспроизведите чистую установку в отдельной копииСкопируйте проект с lock-файлом в тестовый каталог и выполните
npm ci --include=dev. Команда удаляет node_modules именно этой копии; на рабочем сервере нельзя использовать её без процедуры развёртывания. - Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюВ тестовой копии с корректным package-lock.json; запускает доверенные установочные скрипты зависимостей.
npm ci --include=devКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 6. Уточните optional и платформуЕсли пакет находится в optionalDependencies, ознакомьтесь с журналом npm и поддерживаемой архитектурой. Не устанавливайте двоичный пакет не своей платформы; разработчик может предоставлять альтернативу.
- 7. Проверьте необходимый сценарий запускаВ копии выполните прежний
npm run buildили импорт отсутствующей зависимости. Если всё исправно, настройте отдельные шаги сборки и рабочей установки, сохраняя правила production-развёртывания.
#Как проверить результат и что делать, если не помогло
Пакет обнаруживается через npm ls и требуемый сценарий сборки/запуска проходит; рабочий образ не содержит лишних dev-зависимостей без необходимости.
Если неисправность повторилась, выпишите первый код ошибки и действие, на котором она возвращается. Сравните версию Node.js/npm, рабочий каталог, настройки процесса и журнал тестового запуска. Откатите только внесённые изменения из предварительно сохранённой копии, затем разберите причину на отдельной среде.