#Симптомы и условия возникновения
npm install долго не продвигается при загрузке пакета. Причины могут быть в DNS, прокси, недоступном registry, медленном скрипте postinstall или крупном архиве; отличить их можно по подробному журналу. Для начала проверьте используемую версию среды и точный текст ошибки на копии проекта, не меняя рабочий сервер.
#Причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Проблема связи с реестромВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | ETIMEDOUT/ECONNRESET, нет ответа npm ping | Проверить DNS, TLS и настройки прокси. |
| Ожидание скрипта установкиВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Зависание после скачивания, виден lifecycle script | Определить пакет и его проверяемый скрипт. |
| Медленная загрузка большого пакетаВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Поступает трафик, счётчик увеличивается | Оценить размер, скорость и ограничения канала. |
#Пошаговая диагностика и решение
- 1. Не прерывайте работу без данных о стадииВ тестовой копии проекта запишите время, имя пакета и последнюю строку npm. Посмотрите активность сети/процессора; сообщения о скриптах после установки не равны проблеме скачивания.
- 2. Проверьте реестр и доступностьВыполните
npm config get registry, затемnpm ping --fetch-timeout=15000. Если ping возвращает сбой, переходите к DNS, сетевым ограничениям и сертификату. - Дополнительная команда по темеLinux · Терминал (Bash)КомандаСетевой диагностический запрос к настроенному registry; 15000 — время ожидания в миллисекундах.
npm ping --fetch-timeout=15000
- 3. Включите подробный вывод только для копииВ тестовом каталоге запустите
npm install --loglevel verbose --foreground-scripts. Это может исполнять postinstall; используйте только доверенные зависимости. Не публикуйте полный лог без удаления токенов.
- 4. Проверьте прокси и TLSСверьте прокси через
npm config get proxy/https-proxyи настройки своей сети. Если появляется сертификатная ошибка, используйте доверенный CA, а не отключение strict-ssl.
- 5. Определите, действительно ли скачивание идётСравните размер скачиваемого пакета и пропускную способность вашей сети. Если журнал показывает ожидание конкретного файла, временно попробуйте другую разрешённую сеть, но не произвольное зеркало с неизвестными пакетами.
- 6. Оцените состояние кэша без удаления проектаЗапустите
npm cache verify; команда проверит кэш npm, не удаляя node_modules. Избегайте очистки кэша как первого шага — это может только увеличить время загрузки. - Обычный пользователь, проверяет локальный кэш npm; обычно не требует прав администратораLinux · Терминал (Bash)КомандаОбычный пользователь, проверяет локальный кэш npm; обычно не требует прав администратора.
npm cache verify
- 7. Повторите установку с контролем результатаВ той же копии выполните установку при исправленной сети или скрипте, убедитесь, что появился итог added/changed и npm ls показывает зависимости. В рабочий проект переносите только испытанную конфигурацию.
#Как проверить результат и что делать, если не помогло
Установка в тестовой копии доходит до итоговой строки без зависания, а необходимые пакеты доступны через npm ls.
Если неисправность повторилась, выпишите первый код ошибки и действие, на котором она возвращается. Сравните версию Node.js/npm, рабочий каталог, настройки процесса и журнал тестового запуска. Откатите только внесённые изменения из предварительно сохранённой копии, затем разберите причину на отдельной среде.