#Симптомы и условия возникновения
Запуск npm из чужого каталога выдаёт ENOENT или «Could not read package.json». Это ошибка поиска файла проекта, а не обязательно повреждённая установка npm. Для начала проверьте используемую версию среды и точный текст ошибки на копии проекта, не меняя рабочий сервер.
#Причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет package.jsonВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Ошибка содержит путь и syscall open | Перейти в папку с нужным проектом. |
| Запущен другой рабочий каталогВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | При ручном запуске работает, в cron/CI нет | Указать рабочий каталог явно. |
| Имя/регистр не совпадаетВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Проблема после переноса Windows → Linux | Сверить фактический путь и регистр файла. |
#Пошаговая диагностика и решение
- 1. Посмотрите путь из ошибкиВ терминале прочитайте строку
ENOENT: no such file or directory, open .../package.json. Путь показывает, где npm искал файл; его не нужно создавать вручную на случайном месте.
- 2. Уточните текущую папкуДля Windows PowerShell выполните
Get-Location, для Linux/macOS —pwd. Затем перечислите файлы (Get-ChildItemлибоls -la) и найдите настоящий package.json.
- 3. Откройте проект в терминалеВ проводнике или файловом менеджере откройте папку с package.json, затем «Открыть терминал». Либо
cd /путь/к/проекту; в Windows используйтеSet-Location "C:\путь\проект"с действительным путём.
- 4. Проверьте метаданные npmВ верном каталоге выполните
npm pkg get nameиnpm pkg get scripts. Если файл есть, но JSON повреждён, появится ошибка разбора, которую нужно исправить по строке и позиции. - Чтение project package.json; если имя задано, возвращается его значениеLinux · Терминал (Bash)КомандаЧтение project package.json; если имя задано, возвращается его значение.
npm pkg get name
- 5. Учтите монорепозиторийЕсли package.json находится в корне и в отдельных подпроектах, определите, на каком уровне предусмотрен нужный скрипт. Для npm workspaces используют соответствующие настройки и флаг
--workspace, а не угадывают путь.
- 6. Исправьте запуск из cron/CIВ файле задания укажите рабочую папку проекта (например,
WorkingDirectory=в systemd либо шагcdв сценарии). При отсутствии прав на папку нужно исправить права конкретного задания, а не выдавать всем глобальный доступ.
- 7. Повторите команду из нужного контекстаВыполните прежнее
npm runилиnpm ciтолько на копии для установки, убедитесь, что npm читает ожидаемый package.json. Если ENOENT указывает уже на другую зависимость, разберите новый путь отдельно.
#Как проверить результат и что делать, если не помогло
Вывод npm pkg get name соответствует нужному проекту, команда npm больше не ищет package.json в случайной рабочей папке.
Если неисправность повторилась, выпишите первый код ошибки и действие, на котором она возвращается. Сравните версию Node.js/npm, рабочий каталог, настройки процесса и журнал тестового запуска. Откатите только внесённые изменения из предварительно сохранённой копии, затем разберите причину на отдельной среде.