Почему NPM пакеты устанавливаются долго, а то и вообще не устанавливаются?

Суть проблемы в том что долго а то и вообще не устанавливаются npm пакеты а также не появляется папка node_modules. Пробовал переинициализацию и обновлял json фаил, и просто отдельно пытался установить какой-то модуль, проблема та же, как на Windows так и на Linux. Node v5.8.0 npm v3.7.3
Кто может подсказать что это и как можно решить эту проблему, спасибо заранее.
  • Вопрос задан
  • 3328 просмотров
Пригласить эксперта
Ответы на вопрос 1
Psychosynthesis
@Psychosynthesis
Fullstack developer and radio engineer
Данная проблема встречается во многих версиях npm и NodeJS, и, насколько я понимаю, в некоторых случаях может быть актуальна до сих пор, потому решил ответить на вопрос сейчас.

Насколько я понял из гугления, если исключить самую очевидную проблему ("у вас проблемы с инетом"), то причин подобного поведения может быть множество. Я расскажу как я оказался в аналогичном положении и что делал для решения проблемы, возможно кому-то это будет полезно.

В моём случае однажды появился назойливый баг с алиасами Babel, что в итоге потребовало его обновления, а после обновления Бабеля просто перестал собираться проект. Пришлось обновлять Node, затем npm и т.д. В итоге, проект всё же собрался, но появилась проблема, озвученная в вопросе - npm ci (это почти то же что и npm install, только ставит строго те версии, которые указаны в package-lock) стал работать ооочень медленно, подолгу зависая на разных случайных пакетах.

Я предположил, что причин у подобной ситуации в итоге может быть две:
  1. Забился кэш ноды и\или npm - я пробовал npm cache clean --force и удалял все папки, создаваемые при сборке, а также все найденные мною папки cache, это не помогло. В итоге я не придумал ничего лучше, чем полностью удалить Node и npm из системы, что не так-то просто сделать на линуксе.
    Для удаления ноды мне лично неплохо помог вот этот пакет https://github.com/brock/node-reinstall (правда руками тоже потом пришлось искать и удалять папки с именами node и npm)... Для свежей установки ноды в сети советуют использовать NVM, однако на мой личный взгляд NVM это паршиво работающее, запутанное и кривое говно, с корявой документацией и постоянно изменяющимся синтаксисом команд, поэтому я так делать не советую (да, я пробовал, он работает, но с ним постоянно возникают какие-то проблемы, поэтому без необходимости иметь две разных ноды на одной машине его лучше всё же не ставить).
    Лучше ставьте нужную версию ноды по инструкции с офф.сайта для вашей системы, используя стандартный менеджер пакетов. По крайней мере в случае с Ubuntu 20.04 это сработало отлично. Инструкции для Ubuntu и Debian-based дистрибутивов лежат вот тут: https://github.com/nodesource/distributions/blob/m...

    Вообще там по ссылке много вариантов, но вот пример для установки 14-й версии самым простым способом:
    # Using Ubuntu
    	curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
    	sudo apt-get install -y nodejs
    
    	# Using Debian, as root
    	curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
    	apt-get install -y nodejs



  2. Второй возможный вариант - проблема в том, что для новых версий npm как-то изменились сервера удалённых репозиториев некоторых старых пакетов, из-за их устаревания (я замечал что при попытке установить пакеты чаще всего "фризы" случались именно на старых пакетах, типа третьей версии TypeScript).
    Я, к сожалению, не знаю нюансы работы системы репозиториев npm, поэтому это лишь предположение. В данном случае, рекомендация одна - попытаться обновить пакеты до последних версий, и по возможности избавиться от depricated пакетов.



Не претендую на истину, возможно это лишь баг какой-то из версий npm или даже конкретной связки NodeJS + npm. Однако возможно кому-нибудь пригодится предложенный мной путь решения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы